Почему бесконечности с плавающей точкой, в отличие от NaN, равны?
Почему бесконечное сравнение не следует логике, применяемой к NaNs? Этот код распечатываетfalse
три раза:
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
Однако, если я изменюDouble.NaN
вDouble.POSITIVE_INFINITY
, Я получилtrue
для равенства, ноfalse
для сравнений больше и меньше чем:
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
Это кажется опасным. Предполагая, что бесконечные значения являются результатом переполнения, я полагаю, что более вероятно, что две переменные, которые оказались бесконечными, на самом деле не будут равны в идеальной арифметике.