Puoi verificare se la tua implementazione lo ha:
#include <math.h>
#ifdef NAN
#endif
#ifdef INFINITY
#endif
L'esistenza di INFINITYè garantita da C99 (o almeno l'ultima bozza) e "si espande a un'espressione costante di tipo float che rappresenta un infinito positivo o senza segno, se disponibile; altrimenti a una costante positiva di tipo float che trabocca al momento della traduzione".
NAN può o non può essere definito, e "è definito se e solo se l'implementazione supporta NaN silenziosi per il tipo float. Si espande in un'espressione costante di tipo float che rappresenta un NaN silenzioso."
Nota che se stai confrontando valori in virgola mobile e fai:
a = NAN;
anche allora,
a == NAN;
è falso. Un modo per verificare NaN sarebbe:
#include <math.h>
if (isnan(a)) { ... }
Puoi anche fare: a != aper verificare se aè NaN.
C'è anche isfinite(), isinf(), isnormal(), e signbit()macro in math.hin C99.
C99 ha anche nanfunzioni:
#include <math.h>
double nan(const char *tagp);
float nanf(const char *tagp);
long double nanl(const char *tagp);
(Riferimento: n1256).
Documenti INFINITY
Documenti NAN