dnan
#define IsNANorINF(X) (((dnan *)&(X))->nan_parts.exponent == 0x7ff)
#define IsINF(X) (((dnan *)&(X))->inf_parts.bits == 0 && \
((dnan *)&(X))->inf_parts.fraction_low == 0)
#define IsPosNAN(X) (((dnan *)&(X))->nan_parts.sign == 0)
#define IsNegNAN(X) (((dnan *)&(X))->nan_parts.sign == 1)
#define GETNaNPC(dval) (((dnan *)&(dval))->inf_parts.bits << 12 | \
((dnan *)&(dval))->nan_parts.fraction_low >> 20)
#define NaN(X) (((dnan *)&(X))->nan_parts.exponent == 0x7ff)