Вы можете проверить, есть ли это в вашей реализации:
#include <math.h>
#ifdef NAN
#endif
#ifdef INFINITY
#endif
Существование INFINITY
гарантируется C99 (или, по крайней мере, последним черновиком) и «расширяется до постоянного выражения типа float, представляющего положительную или беззнаковую бесконечность, если доступно; в противном случае до положительной константы типа float, которая переполняется во время перевода».
NAN
может быть определен или не определен, и «определяется тогда и только тогда, когда реализация поддерживает тихие NaN для типа float. Оно расширяется до константного выражения типа float, представляющего тихое NaN».
Обратите внимание, что если вы сравниваете значения с плавающей запятой, и выполните:
a = NAN;
даже тогда,
a == NAN;
ложно. Один из способов проверить NaN:
#include <math.h>
if (isnan(a)) { ... }
Вы также можете: a != a
проверить, a
является ли NaN.
Существует также isfinite()
, isinf()
, isnormal()
и signbit()
макросы в math.h
в C99.
C99 также имеет nan
функции:
#include <math.h>
double nan(const char *tagp);
float nanf(const char *tagp);
long double nanl(const char *tagp);
(Ссылка: n1256).
Документы INFINITY
Docs NAN