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 INFINITYwird 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 != azu testen, ob aNaN vorhanden ist.
Es gibt auch isfinite(), isinf(), isnormal(), und signbit()Makros in math.hin C99.
C99 hat auch nanFunktionen:
#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