Как сравнить float с NaN, если сравнение с NaN всегда возвращает false?

У меня есть значение float, установленное на NaN (видно в окне просмотра), но я не могу понять, как это обнаружить в коде:

if (fValue == float.NaN) // returns false even though fValue is NaN
{
}

Ответ 1

Вы хотите float.IsNaN(...). Сравнение с NaN всегда возвращает false, независимо от того, какое значение имеет float. Это один из причуд плавающих точек.

Это означает, что вы можете сделать это:

if (f1 != f1) { // This conditional will be true if f1 is NaN.

Фактически, именно так работает IsNaN().

Ответ 2

Попробуйте следующее:

if (float.IsNaN(fValue))
{
}

Ответ 3

В критическом по производительности кодеке float.IsNaN может быть слишком медленно, поскольку он включает FPU. В этом случае вы можете использовать проверку бинарной маски (согласно

Ответ 4

if(float.isNaN(fValue))
{
}

Ответ 5

if (fValue.CompareTo(float.NaN) == 0)

Примечание. Я знаю, что поток мертв.