Я пытаюсь изучить, как перепроектировать программное обеспечение и все приемы, чтобы понять, как код похож перед оптимизацией компилятора.
Я несколько раз находил что-то вроде этого:
if (a < 0)
a = -2147483648 - a;
Я первоначально думал, что это было abs()
: потери значимости, таким образом, Вы получаете положительное значение. Но с тех пор a
отрицательно (см. если), это эквивалентно:
if (a < 0)
a = -2147483648 + abs(a);
Который будет очень маленьким отрицательным числом а не абсолютным значением a
вообще. Что я пропускаю?