Unter der g ++ - Version 4.8.0 (32-bit mingw) ist die Quadratwurzel von -0.0 (Binärdarstellung 0x8000000000000000) NAN. Aber ich hätte schwören können, dass frühere Versionen (ich bin mir nicht sicher welche, aber das letzte Mal, als ich meine volle Testsuite lief) einfach 0.0 zurückgaben, was mir vernünftiger erscheint.
Stimmt das? Hat sich etwas im C ++ - Standard geändert oder ist dies eine Änderung von g ++?
Dies ist ein Nicht-Standard-Verhalten der MinGW-Umgebung (das ich indirekt auch durch einen Kunden beobachtet habe, für den die Software, an der ich arbeite, unerwartet versagte).
Sie haben möglicherweise das korrekte Ergebnis für sqrt(-0.)
, dh -0.
, mit einer höheren Optimierungsstufe gesehen, in der der Wert zur Kompilierungszeit korrekt berechnet wurde, oder mit einer früheren Version der Laufzeit, in der der Fehler aufgetreten ist war nicht anwesend.
Ich habe meine eigene "fixed" sqrt()
als:
(*) IEEE 754 definiert sqrt(-0.)
als -0.
. Ein C- oder C ++ - Compiler muss IEEE 754 nicht für Fließkomma-Arithmetik implementieren, aber GCC versucht (und in diesem speziellen Fall schlägt es fehl).
Tags und Links floating-point g++4.8