Почему компилятор не оптимизирует число с плавающей точкой * 2 в приращении показателя?
Мы часто замечали, что gcc преобразует умножения в сдвиги в исполняемом файле. Нечто подобное может произойти при умноженииint
иfloat
, Например,2 * f
, может просто увеличить показатель степениf
на 1, сохраняя несколько циклов. Сделайте компиляторы, возможно, если кто-то попросит их сделать это (например, через-ffast-math
) в общем так?
Достаточно ли умны компиляторы, чтобы сделать это, или мне нужно сделать это самостоятельно, используяscalb*()
или жеldexp()/frexp()
семейная функция?