GCC's man page afferma che -funsafe-math-optimizations
consente ottimizzazioni che "(a) presuppongono che argomenti e risultati siano validi e (b) possano violare gli standard IEEE o ANSI", ma non è molto preciso, vero?Che tipo di ottimizzazioni sono incluse in -funsafe-math-optimization?
Cosa potrebbe essere un argomento "non valido" in questo caso? NaN? Infiniti? Subnormals? Numeri negativi a sqrt()
?
Quanto sono lontani i risultati consentiti per deviare dagli standard IEEE o ANSI? È "semplicemente" roba come operation associativity and ordering, o potrebbe includere ad es. confronti reali con NaNs o confronti scorretti con infiniti? Una variabile memorizzata può essere arrotondata dopo essere stata già utilizzata (in modo che, per variabilix
e , (x == y) + (x == y)
potrebbe valutare 1)? Potrebbe isinf()
/isnan()
smettere di funzionare?
Gli sviluppatori GCC seguono un particolare sistema o disciplina per quanto riguarda tali domande o la risposta potrebbe differire da una versione all'altra?
Per quanto ne so, non ci scherza. '-ffinite-math-only' e' -ffast-math' fanno però. – harold