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

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

21
задан paxdiablo 15 February 2013 в 00:09
поделиться

3 ответа

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

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

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

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

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

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

int isnan_float (float f) { return (f != f); }
31
ответ дан 29 November 2019 в 20:51
поделиться

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

-1
ответ дан 29 November 2019 в 20:51
поделиться

В 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

7
ответ дан 29 November 2019 в 20:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: