2010-08-09 5 views
20

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

+3

NIL (NULL в C-ESE) это специальное * указатель * значение. Для чисел нет значения NULL. Возможно, вы думаете о NaN с плавающей точкой? – zwol

+0

Я имел в виду NaN, мой плохой, исправил Q. – MBZ

+0

Дубликат: http://stackoverflow.com/questions/570669/checking-if-a-double-or-float-is-nan-in-c – GManNickG

ответ

31

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

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

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

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

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

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

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

И заверните 'myFloat! = myFloat' в какую-то функцию' isnan' с комментарием, чтобы будущие читатели, которые не знают об этом, очень смущены. – GManNickG

-1

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

7

Под 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