Prüfen ob double == inf
-
Hallo,
wie kann ich prüfen ob eine double-Variable, den Wert inf bzw. nan hat?
mfG,
Matthias
-
-
Für NaN:
if(x!=x) cout<<"Not a Number";
(wenn du NaN mit irgendwas vergleichst, kommt immer false raus)
Für Inf:
if(x==numeric_limits<double>::infinity()) cout<<"Infinity";
(oder du kannst den Wert über ein char* abtasten und auf Binärebene mit numeric_limits<double>::quiet_NaN(), signalling_NaN() bzw. infinity() vergleichen)
-
CStoll schrieb:
Für NaN:
if(x!=x) cout<<"Not a Number";
(wenn du NaN mit irgendwas vergleichst, kommt immer false raus)
Ich mag mich irren, aber war es nicht so, dass der Standard nur sagt, dass == mit NaN false ergibt? Impliziert das, dass != true ergibt?
-
Sorry, mein Fehler - ich hab' zu intensiv optimiert:
if(!(x==x)) cout<<"Not a Number";
So müsste es jetzt stimmen (hoffe ich).
-
CStoll schrieb:
Sorry, mein Fehler - ich hab' zu intensiv optimiert:
if(!(x==x)) cout<<"Not a Number";
So müsste es jetzt stimmen (hoffe ich).
Nicht zwingend. Sofern du Signaling NaNs hast, kann die erste arithmethische Operation darauf eine Floating Point Exception loslassen. C99 hat eine isNAN-Funktion. C++(98) hat aber meines Wissens nach kein Äquivalent.
-
7H3 N4C3R schrieb:
Sofern du Signaling NaNs hast, kann die erste arithmethische Operation darauf eine Floating Point Exception loslassen.
Ist ein Vergleich eine arithmetische Operation?
-
fabs(double1)-fabs(double2) == 0
-
Davor halt noch prüfen ob beide pos oder neg sind.
-
@Arithmetiker: Wer sagt dir, daß C++ so einen Aufwand für dne Vergleich betreibt?
@N4C3R: Wenn alle Stricke reißen, bleibt immer noch Variante b von oben
(binärer Vergleich mit den numeric_limits<>-Membern)
-
CStoll schrieb:
@Arithmetiker: Wer sagt dir, daß C++ so einen Aufwand für dne Vergleich betreibt?
@N4C3R: Wenn alle Stricke reißen, bleibt immer noch Variante b von oben
(binärer Vergleich mit den numeric_limits<>-Membern)
Wer sagt dir, dass C++ diesen Aufwand nicht betreibt?
-
Arithmetiker schrieb:
CStoll schrieb:
@Arithmetiker: Wer sagt dir, daß C++ so einen Aufwand für dne Vergleich betreibt?
@N4C3R: Wenn alle Stricke reißen, bleibt immer noch Variante b von oben
(binärer Vergleich mit den numeric_limits<>-Membern)
Wer sagt dir, dass C++ diesen Aufwand nicht betreibt?
A signaling NAN can be copied, assigned, and compared without causing an exception
(aus dem Link, den GPC oben gepostet hat)
-
CStoll schrieb:
A signaling NAN can be copied, assigned, and compared without causing an exception
(aus dem Link, den GPC oben gepostet hat)
Hm habe ich auch gerade zeitgleich gesehen.
Zumindest die Alpha-Maschine hier sieht das aber nicht ganz so und triggert schon beim Vergleich eine FPE. Im Standard wird das mit dem Vergleichen soweit ich das gesehen habe nicht explizit erwähnt.