¿Por qué los infinitos de coma flotante, a diferencia de los NaN, son iguales?

¿Por qué la comparación infinita no sigue la lógica aplicada a los NaN? Este código se imprimefalse tres veces:

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

Sin embargo, si cambioDouble.NaN aDouble.POSITIVE_INFINITY, Yo obtengotrue por la igualdad, perofalse para las comparaciones mayor que y 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

Esto parece peligroso. Suponiendo que los valores infinitos resultan de desbordamientos, imagino que es más probable que dos variables que terminaron como infinitos no sean iguales en aritmética perfecta.

Respuestas a la pregunta(8)

Su respuesta a la pregunta