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