Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
int sa=a>>31, sb=b>>31;
int sres=sa^sb;
a=(a^sa)-sa; b=(b^sb)-sb;
int d=a-b;
d&=(d>>31);
return ((b+d)^sres)-sres;
int a,b,min;
...
min = a - (a-b) * ( ((a-b) >> 31) + 1 );
x = 2 * atanh(tanh(a/2) * tanh(b/2)),
x = max(a + b, 0) + log(1 + exp(-abs(a + b)))
- max(a, b) - log(1 + exp(-abs(a - b)))
log(1 + exp(-abs(t))) для разных значений t. Для нее приходится делать lookup table. Работает это дело относительно медленно — уже не так важно, как вы там вычисляете максимум.static inline int f4(int a, int b)
{
int _a=-a;
_a=_a<0?a:_a;
int _b=-b;
_b=_b<0?b:_b;
_a=_a<_b?_a:_b;
int _c=-_a;
_c=(a^b)<0?_c:_a;
return _c;
}
//eax==a, edx==b
mov ebx, eax
neg ebx
cmovs ebx, eax
mov ecx, edx
neg ecx
cmovs ecx, edx
cmp ebx, edx
cmovg ebx, edx
mov edx, ebx
neg edx
xor eax, ebx
cmovs ebx, edx
//ebx <- ответ
static inline int f5(int a, int b)
{
int s,_a,_b,n[2];
_a=(a>>31)&0xFFFFFFFE;
_b=(b>>31)&0xFFFFFFFE;
s=(_a^_b)+1;
a*=(_a)+1;
b*=(_b)+1;
n[0]=b;
n[1]=a;
return s*n[a<b];
}
Оптимизация времени выполнения программы на С++ (убираем условные переходы)