¿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.