Можно ли проверить, является ли число NaN
или нет?
Проверьте номер NaN
Ответ 1
Да, используя тот факт, что a NaN
не равно никакому другому числу, включая его.
Это имеет смысл, если вы думаете о том, что означает NaN
, о том, что вы создали значение, которое на самом деле не в ваших силах для представления с "нормальными" значениями с плавающей запятой.
Итак, если вы создадите два числа, в которых вы не знаете, что это такое, вы вряд ли сможете считать их равными. Они могут быть, но, учитывая довольно большую возможность чисел, что это может быть (бесконечно на самом деле), вероятность того, что два одинакового числа, исчезающе мала: -)
Вы можете либо искать функцию (фактически макрос), например isnan
(в math.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, но это полезно только для указателей. число не может быть нулевым, оно либо имеет известное значение, которое вы ввели там, либо случайные данные из того, что было в памяти раньше.