Можно ли проверить, есть ли номер NaN
или нет?проверить номер NaN
ответ
Да, используя тот факт, что NaN
не равен никакому другому номеру, включая себя.
Это имеет смысл, если вы думаете о том, что означает NaN
, что вы создали значение, которое на самом деле не в ваших силах для представления с «нормальными» значениями с плавающей запятой.
Итак, если вы создадите два номера, где вы не знаете, что они собой представляют, вы вряд ли сможете считать их равными. Они могут быть, но, учитывая довольно большую возможность чисел, что это может быть (бесконечно на самом деле), шансы на то, что два одинакового числа исчезающе малы :-)
Вы можете либо искать функцию (макрос на самом деле), как isnan
(в math.h
для C и cmath
для C++) или просто использовать свойство, что значение NaN
не равное себе что-то вроде:
if (myFloat != myFloat) { ... }
Если, по какой-то странной причине, вашей реализации C не имеет isnan
(он должен, поскольку стандарт предусматривает его), вы можете закодировать свой собственный, так что mething как:
int isnan_float (float f) { return (f != f); }
И заверните 'myFloat! = myFloat' в какую-то функцию' isnan' с комментарием, чтобы будущие читатели, которые не знают об этом, очень смущены. – GManNickG
Вы ищете null, но это полезно только для указателей. число не может быть нулевым, оно либо имеет известное значение, которое вы ввели там, либо случайные данные из того, что было в памяти раньше.
Под Linux/GCC, есть IsNaN (двойной), в соответствии с BSD4.3.
С99 обеспечивает fpclassify (х) и IsNaN (х).
(Но C++ стандарты/Составители не обязательно включают в себя функциональные возможности C99.)
Там должно быть каким-то образом с станд :: numeric_limit <> ... Проверяю ...
Doh. Я должны были знать ... На этом вопрос есть ответ ... Checking if a double (or float) is NaN in C++ Using NaN in C++? http://bytes.com/topic/c/answers/588254-how-check-double-inf-nan
NIL (NULL в C-ESE) это специальное * указатель * значение. Для чисел нет значения NULL. Возможно, вы думаете о NaN с плавающей точкой? – zwol
Я имел в виду NaN, мой плохой, исправил Q. – MBZ
Дубликат: http://stackoverflow.com/questions/570669/checking-if-a-double-or-float-is-nan-in-c – GManNickG