Как сравнить 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. В этом случае вы можете использовать проверку бинарной маски (согласно