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