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

Проверьте номер NaN

Можно ли проверить, является ли число NaN или нет?

4b9b3361

Ответ 1

Да, используя тот факт, что a NaN не равно никакому другому числу, включая его.

Это имеет смысл, если вы думаете о том, что означает NaN, о том, что вы создали значение, которое на самом деле не в ваших силах для представления с "нормальными" значениями с плавающей запятой.

Итак, если вы создадите два числа, в которых вы не знаете, что это такое, вы вряд ли сможете считать их равными. Они могут быть, но, учитывая довольно большую возможность чисел, что это может быть (бесконечно на самом деле), вероятность того, что два одинакового числа, исчезающе мала: -)

Вы можете либо искать функцию (фактически макрос), например isnanmath.h для C и cmath для С++), либо просто использовать свойство, что значение NaN не равно себе с чем-то как:

if (myFloat != myFloat) { ... }

Если для какой-то причудливой причины ваша реализация C не имеет isnan (она должна, поскольку стандарт ее определяет), вы можете закодировать свой собственный, что-то вроде:

int isnan_float (float f) { return (f != f); }

Ответ 2

В Linux/gcc существует isnan (double), соответствующий BSD4.3.

C99 предоставляет fpclassify (x) и isnan (x).
(Но стандарты/компиляторы С++ необязательно включают функциональность C99.)

Должен быть какой-то способ с std:: numeric_limit < > ... Проверка...

Doh. Я должен был знать... На этот вопрос был дан ответ... Проверка наличия двойного (или плавающего) NaN в С++ Использование NaN в С++? http://bytes.com/topic/c/answers/588254-how-check-double-inf-nan

Ответ 3

вы ищете null, но это полезно только для указателей. число не может быть нулевым, оно либо имеет известное значение, которое вы ввели там, либо случайные данные из того, что было в памяти раньше.