Puede probar si su implementación lo tiene:
#include <math.h>
#ifdef NAN
#endif
#ifdef INFINITY
#endif
La existencia de INFINITY
está garantizada por C99 (o el último borrador al menos), y "se expande a una expresión constante de tipo float que representa infinito positivo o sin signo, si está disponible; de lo contrario, a una constante positiva de tipo float que se desborda en el momento de la traducción".
NAN
puede o no estar definido, y "se define si y solo si la implementación admite NaN silenciosos para el tipo float. Se expande a una expresión constante de tipo float que representa un NaN silencioso".
Tenga en cuenta que si está comparando valores de punto flotante y haga lo siguiente:
a = NAN;
incluso entonces,
a == NAN;
Es falso. Una forma de verificar el NaN sería:
#include <math.h>
if (isnan(a)) { ... }
También puede hacer: a != a
para probar si a
es NaN.
También hay isfinite()
, isinf()
, isnormal()
, y signbit()
macros en math.h
en C99.
C99 también tiene nan
funciones:
#include <math.h>
double nan(const char *tagp);
float nanf(const char *tagp);
long double nanl(const char *tagp);
(Referencia: n1256).
Docs INFINITY
Docs NAN