Warum sind Gleitkomma-Unendlichkeiten im Gegensatz zu NaNs gleich?
Warum folgt der Unendlichkeitsvergleich nicht der Logik, die auf NaNs angewendet wird? Dieser Code gibt @ afalse
drei Mal
double a = Double.NaN;
double b = Double.NaN;
System.out.println(a == b); // false
System.out.println(a < b); // false
System.out.println(a > b); // false
Jedoch, wenn ich ändereDouble.NaN
zuDouble.POSITIVE_INFINITY
, Ich bekommetrue
für Gleichheit, aberfalse
für die Vergleiche größer als und kleiner als:
double a = Double.POSITIVE_INFINITY;
double b = Double.POSITIVE_INFINITY;
System.out.println(a == b); // true
System.out.println(a < b); // false
System.out.println(a > b); // false
Das scheint gefährlich. Unter der Annahme, dass unendliche Werte aus Überläufen resultieren, ist es wahrscheinlicher, dass zwei Variablen, die als Unendlichkeiten endeten, in perfekter Arithmetik nicht gleich sind.