-ffast-math
robi o wiele więcej niż tylko łamanie ścisłej zgodności z IEEE.
Przede wszystkim oczywiście się psuje ścisłą zgodność z IEEE, pozwalając np. Na zmianę kolejności instrukcji na coś, co jest matematycznie takie samo (idealnie), ale nie dokładnie takie samo w postaci zmiennoprzecinkowej.
Po drugie, wyłącza ustawianie errno
po funkcjach matematycznych składających się z jednej instrukcji, co oznacza unikanie zapisu do zmiennej lokalnej wątku (może to spowodować 100% różnicę dla tych funkcji na niektórych architekturach).
Po trzecie, przyjmuje założenie, że cała matematyka jest skończona , co oznacza, że nie są przeprowadzane żadne kontrole dla NaN (lub zera), w którym miałyby one szkodliwe skutki. Po prostu zakłada się, że tak się nie stanie.
Po czwarte, umożliwia odwrotne przybliżenie dzielenia i odwrotności pierwiastka kwadratowego.
Ponadto wyłącza zero ze znakiem (kod zakłada, że zero ze znakiem nie istnieje, nawet jeśli cel je obsługuje) i zaokrąglanie matematyki, co umożliwia między innymi stałe zawijanie w czasie kompilacji.
Na koniec generuje kod, który zakłada, że żadne przerwania sprzętowe nie mogą się zdarzyć z powodu matematyki sygnalizującej / pułapkowej (to znaczy, jeśli nie można ich wyłączyć w architekturze docelowej i w konsekwencji się zdarzają , nie będą obsługiwane).