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