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 != a
para testar se a
é NaN.
Há também isfinite()
, isinf()
, isnormal()
, e signbit()
macros no math.h
no C99.
C99 também tem nan
funçõ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