проверить номер NaN - PullRequest
       2

проверить номер NaN

21 голосов
/ 09 августа 2010

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

Ответы [ 3 ]

31 голосов
/ 09 августа 2010

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

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

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

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

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

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

int isnan_float (float f) { return (f != f); }
7 голосов
/ 09 августа 2010

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

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

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

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

0 голосов
/ 09 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...