MSVC entspricht GCC-fno-endlich-nur-Mathematik?

9

Bei GCC aktivieren wir -ffast-math , um Gleitkommaberechnungen zu beschleunigen. Da wir uns aber auf das korrekte Verhalten von NaN- und Inf-Gleitkommawerten verlassen, aktivieren wir auch -fno-finite-math-only , so dass Optimierungen, die Werte annehmen, nicht NaN / Inf

sind

Bei MSVC ist das "Äquivalent" zu -ffast-math anscheinend /fp:fast . Wie GCCs -ffast-math enthält es jedoch auch die Optimierungen, die davon ausgehen, dass Nan / Inf nicht vorhanden sind. (Kritisch ist, scheint Tests wie std :: isnan () sind nicht garantiert, um "genaue" Ergebnisse zu geben.)

Gibt es eine Option für die MSVC C ++ - Kompilierung, mit der Sie die meisten /fp:fast -Optimierungen nutzen können, aber NaN- und Inf-Werte trotzdem "richtig" behandelt? (Oder zumindest garantiert, dass Tests wie std :: isnan () / std :: isinf () NaN / Inf erkennen, wenn sie zufällig generiert werden.)

    
R.M. 21.10.2016, 16:17
quelle

1 Antwort

1
%Vor%

Im Gegensatz zu GCC optimiert MSVC (CL RC 19) nicht wirklich std::isnan in der Einstellung /fp:fast :

Eine weitere Alternative, die niemals optimiert wird, ist das Aufrufen des C99 isnan oder des MSVC intrinsic _isnanf . Oder rolle deinen eigenen nan Test gegen eine bekannte Bitmaske, die mit std::numeric_limits::quiet_NaN generiert werden kann.

Siehe: Ссылка

    
Mikhail 05.02.2017 06:25
quelle

Tags und Links