Вы можете проверить, есть ли это в вашей реализации:
#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