Vous pouvez tester si votre application a:
#include <math.h>
#ifdef NAN
/* NAN is supported */
#endif
#ifdef INFINITY
/* INFINITY is supported */
#endif
L'existence d' INFINITY
est garanti par C99 (ou le dernier projet au moins), et "se développe à une expression constante de type float représentant positif ou non signé
l'infini, si disponibles; d'autre à une constante positive de type float qui déborde à la durée de traduction."
NAN
peut ou ne peut pas être défini, et "est définie si et seulement si l'application prend en charge calme NaNs pour le type float. Il se développe à une expression constante de type float représentant un calme NaN."
Notez que si vous comparez les valeurs à virgule flottante, et à faire:
a = NAN;
même alors,
a == NAN;
est faux. Une façon de vérifier pour NaN serait:
#include <math.h>
if (isnan(a)) { ... }
Vous pouvez également le faire: a != a
pour tester si a
est NaN.
Il est également isfinite()
, isinf()
, isnormal()
, et signbit()
macros en math.h
en C99.
C99 a également nan
fonctions de:
#include <math.h>
double nan(const char *tagp);
float nanf(const char *tagp);
long double nanl(ocnst char *tagp);
(Référence: n1256).