Можно ли проверить, является ли число NaN
или нет?
Да, используя тот факт, что NaN
не равно никакому другому числу, включая себя.
Это имеет смысл, если подумать о том, что означает NaN
, тот факт, что вы создали значение, которое не в ваших силах представить с помощью "обычных" значений с плавающей запятой.
Так, если вы создаете два числа, не зная, что они собой представляют, вы вряд ли можете считать их равными. Они могут быть, но, учитывая довольно большую возможность чисел, которые это могут быть (бесконечную на самом деле), шансы, что два одинаковых числа исчезающе малы :-)
Вы можете либо искать функцию (макрос на самом деле) типа isnan
(в math. h
для C и cmath
для C++) или просто использовать свойство, что значение NaN
не равно самому себе, используя что-то вроде:
if (myFloat != myFloat) { ... }
Если по какой-то странной причине ваша реализация C не имеет isnan
(а она должна, поскольку стандарт предписывает это), вы можете написать свою собственную, что-то вроде:
int isnan_float (float f) { return (f != f); }
вы ищете null, но это полезно только для указателей. число не может быть null само по себе, оно либо имеет известное значение, которое вы туда поместили, либо случайные данные из того, что было в памяти до этого.
В Linux/gcc есть isnan(double), соответствующий BSD4.3.
C99 предоставляет fpclassify(x) и isnan(x).
(Но стандарты/компиляторы C++ не обязательно включают функциональность C99.)
Должен быть какой-то способ с std::numeric_limit<>... Проверяем...
Doh. Я должен был знать... На этот вопрос уже отвечали... Проверка, является ли двойное число (или float) NaN в C++ Использование NaN в C++? http://bytes.com/topic/c/answers/588254-how-check-double-inf-nan