OLD | NEW |
(Empty) | |
| 1 #include "libm.h" |
| 2 |
| 3 #if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 |
| 4 int __fpclassifyl(long double x) |
| 5 { |
| 6 return __fpclassify(x); |
| 7 } |
| 8 #elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384 |
| 9 int __fpclassifyl(long double x) |
| 10 { |
| 11 union ldshape u = {x}; |
| 12 int e = u.i.se & 0x7fff; |
| 13 int msb = u.i.m>>63; |
| 14 if (!e && !msb) |
| 15 return u.i.m ? FP_SUBNORMAL : FP_ZERO; |
| 16 if (!msb) |
| 17 return FP_NAN; |
| 18 if (e == 0x7fff) |
| 19 return u.i.m << 1 ? FP_NAN : FP_INFINITE; |
| 20 return FP_NORMAL; |
| 21 } |
| 22 #elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384 |
| 23 int __fpclassifyl(long double x) |
| 24 { |
| 25 union ldshape u = {x}; |
| 26 int e = u.i.se & 0x7fff; |
| 27 u.i.se = 0; |
| 28 if (!e) |
| 29 return u.i2.lo | u.i2.hi ? FP_SUBNORMAL : FP_ZERO; |
| 30 if (e == 0x7fff) |
| 31 return u.i2.lo | u.i2.hi ? FP_NAN : FP_INFINITE; |
| 32 return FP_NORMAL; |
| 33 } |
| 34 #endif |
OLD | NEW |