Почему бесконечности с плавающей точкой, в отличие от 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&nbsp;вDouble.POSITIVE_INFINITY, Я получилtrue&nbsp;для равенства, ноfalse&nbsp;для сравнений больше и меньше чем:

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

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