Si tengo algunas ecuaciones matemáticas que dependen de entradas que pueden ser cero o distintas de cero (argumento de plantilla, conocido en tiempo de compilación), el optimizador evaluará las ecuaciones y optimizará las expresiones que sabe que se evaluarán a 0 o 1.¿Un optimizador deducirá expresiones matemáticas basadas en constantes de tiempo de compilación?
Por ejemplo:
double x = y * Eval<type>::value;
si es Eval<type>::value
0
, x
siempre habrá 0
.
double x = exp(y * Eval<type>::value);
si es Eval<type>::value
0
, x
siempre habrá 1
.
¿Puede el optimizador resolver esto y reemplazar x
con 0
o 1
en otro lugar en el código, o estos cálculos se llevarán a cabo en tiempo de ejecución?
estoy usando gcc 4.7 con -O3
Si está familiarizado con el montaje, se puede simplemente mirar a la salida de montaje de eso. – Mysticial
Apuesto a que incluso podrías forzarlo a hacer esto en tiempo de compilación con suficientes trucos (SFINAE y otras cosas). – Lalaland
La única respuesta verdaderamente correcta que se puede dar a las preguntas de este formulario es "está permitido, pero no es obligatorio". En este caso, agregue una sopa de "el compilador generalmente no puede hacer mucha optimización algebraica en cálculos de coma flotante a menos que use el interruptor 'seguir adelante y optimizar la velocidad a expensas de * corrección *'". – zwol