1 #include <math.h> 2 #include <stdint.h> 3 __fpclassify(double x)4 int __fpclassify(double x) 5 { 6 union {double f; uint64_t i;} u = {x}; 7 int e = u.i>>52 & 0x7ff; 8 if (!e) return u.i<<1 ? FP_SUBNORMAL : FP_ZERO; 9 if (e==0x7ff) return u.i<<12 ? FP_NAN : FP_INFINITE; 10 return FP_NORMAL; 11 } 12