Sie können testen, ob Ihre Implementierung es hat:
#include <math.h>
#ifdef NAN
/* NAN is supported */
#endif
#ifdef INFINITY
/* INFINITY is supported */
#endif
Die Existenz von INFINITY
wird durch C99 (oder zumindest den neuesten Entwurf) garantiert und "erweitert sich zu einem konstanten Ausdruck des Typs float, der eine positive oder vorzeichenlose Unendlichkeit darstellt, falls verfügbar; andernfalls zu einer positiven Konstante des Typs float, die zur Übersetzungszeit überläuft."
NAN
kann definiert werden oder nicht, und "wird genau dann definiert, wenn die Implementierung leise NaNs für den Float-Typ unterstützt. Sie wird zu einem konstanten Ausdruck des Typs float erweitert, der ein leises NaN darstellt."
Beachten Sie Folgendes, wenn Sie Gleitkommawerte vergleichen, und gehen Sie wie folgt vor:
a = NAN;
sogar dann,
a == NAN;
ist falsch. Eine Möglichkeit, nach NaN zu suchen, wäre:
#include <math.h>
if (isnan(a)) { ... }
Sie können auch Folgendes tun: um a != a
zu testen, ob a
NaN vorhanden ist.
Es gibt auch isfinite()
, isinf()
, isnormal()
, und signbit()
Makros in math.h
in C99.
C99 hat auch nan
Funktionen:
#include <math.h>
double nan(const char *tagp);
float nanf(const char *tagp);
long double nanl(const char *tagp);
(Referenz: n1256).
Docs INFINITY
Docs NAN