-freciprocal-math
en GCC cambia el código siguiente¿Por qué -freciprocal-math no es seguro en GCC?
double a = b/c;
a
double tmp = 1/c;
double a = b * tmp;
En manual de GCC, se dice que tal optimización es inseguro y no va pegada en los estándares IEEE. Pero no puedo pensar en un ejemplo. ¿Podría dar un ejemplo sobre esto?
Considere b = c = 3 –
No tengo IEEE tiene reglas sobre cómo un compilador debe usar el punto flotante. Por ejemplo, X^2 a menudo se reduce a X * X produciendo programas típicamente más rápidos pero con un error diferente que el cálculo especificado por el programador original. Entonces, @Kid, ¿has mirado el estándar IEEE para ver qué límites coloca en los compiladores que usan dicha aritmética? –
@RaymondChen: después de que se aplica el redondeo IEEE (¿arriba? Abajo? Incluso? Ninguno?), ¿No es posible que su ejemplo b = c = 3 produzca exactamente el mismo resultado en a? –