Vous pouvez tester si votre implémentation l'a:
#include <math.h>
#ifdef NAN
#endif
#ifdef INFINITY
#endif
L'existence de INFINITY
est 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 != a
pour tester si a
est NaN.
Il y a aussi isfinite()
, isinf()
, isnormal()
et signbit()
macros math.h
dans C99.
C99 a également des nan
fonctions:
#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