¿Por qué un compilador no optimiza el punto flotante * 2 en un incremento exponencial?
A menudo he notado que gcc convierte las multiplicaciones en cambios en el ejecutable. Algo similar puede suceder al multiplicar unint
y unfloat
. Por ejemplo,2 * f
, podría simplemente incrementar el exponente def
Por 1, ahorrando algunos ciclos. Haga los compiladores, quizás si uno les pide que lo hagan (por ejemplo, a través de-ffast-math
), en general, hacerlo?
¿Son los compiladores generalmente lo suficientemente inteligentes para hacer esto, o tengo que hacerlo yo mismo usando elscalb*()
oldexp()/frexp()
familia de funciones?