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