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.