Почему бесконечности с плавающей точкой, в отличие от 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

Это кажется опасным. Предполагая, что бесконечные значения являются результатом переполнения, я полагаю, что более вероятно, что две переменные, которые оказались бесконечными, на самом деле не будут равны в идеальной арифметике.

Ответы на вопрос(8)

Ваш ответ на вопрос