wearecontent - we are content bogota
¿Qué tipo de optimizaciones se incluyen en-funsafe-math-optimizations? (1)
De acuerdo con gcc.gnu.org (mi negrita ):
Este modo permite optimizaciones que permiten reasociaciones y transformaciones arbitrarias sin garantías de exactitud . Tampoco intenta preservar el signo de ceros .
Eso incluye su mención de reordenamiento asociativo , así como "funciones incorporadas [que] tienen nombres como __builtin_sqrt" que se aplican cuando "pueden tener menos precisión o restringirse a un dominio más pequeño"
La página del manual de GCC afirma que -funsafe-math-optimizations
permite optimizaciones que "(a) asumen que los argumentos y resultados son válidos y (b) pueden violar los estándares IEEE o ANSI", pero eso no es muy preciso, ¿o sí?
¿Qué podría ser un argumento "inválido" en este caso? NaNs? Infinitos? ¿Subnormales? Números negativos a sqrt()
?
¿En qué medida se permite que los resultados se desvíen de los estándares IEEE o ANSI? ¿Se trata de cosas "meramente" como asociatividad operativa y ordenamiento , o podría incluir, por ejemplo? ¿comparaciones verdaderas con NaNs o comparaciones incorrectas con infinites? ¿Podría una variable almacenada ser redondeada después de haber sido utilizada (de manera que, para las variables x
e y
, (x == y) + (x == y)
podría evaluarse a 1)? ¿Podría isinf()
/ isnan()
dejar de funcionar?
¿Los desarrolladores de GCC siguen algún sistema o disciplina en particular con respecto a tales preguntas, o podría la respuesta diferir ampliamente de una versión a otra?