Ви можете перевірити, чи є у вашій реалізації:
#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