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.

Antworten auf die Frage(16)

Ihre Antwort auf die Frage