-ffast-math
macht viel mehr als nur die strikte IEEE-Konformität zu brechen.
Zuallererst verstößt es natürlich gegen die strikte IEEE-Konformität, was beispielsweise die Neuordnung von Anweisungen zu etwas ermöglicht, das mathematisch (idealerweise) aber im Gleitkomma nicht genau gleich ist.
Zweitens wird die Einstellung errno
nach mathematischen Funktionen mit einem Befehl deaktiviert , was bedeutet, dass ein Schreiben in eine threadlokale Variable vermieden wird (dies kann bei einigen Architekturen einen 100% igen Unterschied für diese Funktionen bewirken).
Drittens wird davon ausgegangen, dass die gesamte Mathematik endlich ist , was bedeutet, dass keine Überprüfungen auf NaN (oder Null) durchgeführt werden, an denen sie nachteilige Auswirkungen haben würden. Es wird einfach angenommen, dass dies nicht passieren wird.
Viertens ermöglicht es reziproke Approximationen für Division und reziproke Quadratwurzel.
Außerdem wird die vorzeichenbehaftete Null deaktiviert (Code geht davon aus, dass die vorzeichenbehaftete Null nicht vorhanden ist, auch wenn das Ziel dies unterstützt) und die Rundungsmathematik, die unter anderem eine konstante Faltung zur Kompilierungszeit ermöglicht.
Last, es Code generiert, aufgrund Signalisierung / Trapping math passieren kann keine Hardware - Interrupts geht davon aus, dass (das heißt, wenn diese nicht deaktiviert auf der Zielarchitektur sein kann und folglich passieren kann , werden sie nicht behandelt werden).