Por que os infinitos de ponto flutuante, diferentemente dos NaNs, são iguais?

Por que a comparação infinita não segue a lógica aplicada aos NaNs? Este código é impressofalse três vezes:

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

No entanto, se eu mudarDouble.NaN paraDouble.POSITIVE_INFINITY, Eu recebotrue pela igualdade, masfalse para as comparações maior que e menor que:

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

Isso parece perigoso. Supondo que valores infinitos resultem de estouros, imagino que seja mais provável que duas variáveis que acabaram como infinitas não sejam realmente iguais em aritmética perfeita.

questionAnswers(8)

yourAnswerToTheQuestion