Подтвердить что ты не робот

Почему float.NaN!= Double.NaN в С#?

Почему float.NaN != double.NaN?

а float.PositiveInfinity == double.PositiveInfinity и float.NegativeInfinity == double.NegativeInfinity равно.

Пример:

bool PosInfinity = (float.PositiveInfinity == double.PositiveInfinity); //true
bool NegInfinity = (float.NegativeInfinity == double.NegativeInfinity); //true

bool isNanEqual = (float.NaN == double.NaN);  //false, WHY?
4b9b3361

Ответ 1

NaN никогда не равен NaN (даже в том же типе). Следовательно, существует функция IsNaN:

Double zero = 0;
// This will return true.
if (Double.IsNaN(0 / zero)) 
{
    Console.WriteLine("Double.IsNan() can determine whether a value is not-a-number.");
}

Вы также должны знать, что ни одно из сопоставлений, которые вы показали, на самом деле происходит "как есть". Когда вы пишете floatValue == doubleValue, поплавки фактически будут неявно преобразованы в двойные до того, как произойдет сравнение.

Ответ 2

Возможно, потому что NaN != NaN

Ответ 3

Чтобы процитировать wikipedia:

Сравнение с NaN всегда возвращает неупорядоченный результат даже при сравнении с самим собой.