Você pode testar se sua implementação tem:
#include <math.h>
#ifdef NAN
#endif
#ifdef INFINITY
#endif
A existência de INFINITYé garantida por C99 (ou pelo menos o rascunho mais recente) e "se expande para uma expressão constante do tipo float representando infinito positivo ou sem sinal, se disponível; do contrário, para uma constante positiva do tipo float que transborda no momento da tradução".
NAN pode ou não ser definido, e "é definido se e somente se a implementação suportar NaNs silenciosos para o tipo float. Ele se expande para uma expressão constante do tipo float representando um NaN silencioso."
Observe que se você estiver comparando valores de ponto flutuante, faça:
a = NAN;
mesmo assim,
a == NAN;
é falso. Uma maneira de verificar o NaN seria:
#include <math.h>
if (isnan(a)) { ... }
Você também pode fazer: a != apara testar se aé NaN.
Há também isfinite(), isinf(), isnormal(), e signbit()macros no math.hno C99.
C99 também tem nanfunções:
#include <math.h>
double nan(const char *tagp);
float nanf(const char *tagp);
long double nanl(const char *tagp);
(Referência: n1256).
Docs INFINITY
Docs NAN