Puede probar si su implementación lo tiene:
#include <math.h>
#ifdef NAN
#endif
#ifdef INFINITY
#endif
La existencia de INFINITYestá 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 != apara probar si aes NaN.
También hay isfinite(), isinf(), isnormal(), y signbit()macros en math.hen C99.
C99 también tiene nanfunciones:
#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