Vous pouvez tester si votre implémentation l'a:
#include <math.h>
#ifdef NAN
#endif
#ifdef INFINITY
#endif
L'existence de INFINITYest garantie par C99 (ou le dernier brouillon au moins), et "se développe en une expression constante de type float représentant l'infini positif ou non signé, si disponible; sinon, en une constante positive de type float qui déborde au moment de la traduction."
NAN peut ou non être défini et "est défini si et seulement si l'implémentation prend en charge les NaN silencieux pour le type float. Il se développe en une expression constante de type float représentant un NaN silencieux."
Notez que si vous comparez des valeurs à virgule flottante, et faites:
a = NAN;
même à ce moment là,
a == NAN;
c'est faux. Une façon de vérifier NaN serait:
#include <math.h>
if (isnan(a)) { ... }
Vous pouvez également faire: a != apour tester si aest NaN.
Il y a aussi isfinite(), isinf(), isnormal()et signbit()macros math.hdans C99.
C99 a également des nanfonctions:
#include <math.h>
double nan(const char *tagp);
float nanf(const char *tagp);
long double nanl(const char *tagp);
(Référence: n1256).
Docs INFINITY
Docs NAN