| OLD | NEW |
| 1 #include "libm.h" | 1 #include "libm.h" |
| 2 | 2 |
| 3 float floorf(float x) | 3 float floorf(float x) { |
| 4 { | 4 union { |
| 5 » union {float f; uint32_t i;} u = {x}; | 5 float f; |
| 6 » int e = (int)(u.i >> 23 & 0xff) - 0x7f; | 6 uint32_t i; |
| 7 » uint32_t m; | 7 } u = {x}; |
| 8 int e = (int)(u.i >> 23 & 0xff) - 0x7f; |
| 9 uint32_t m; |
| 8 | 10 |
| 9 » if (e >= 23) | 11 if (e >= 23) |
| 10 » » return x; | 12 return x; |
| 11 » if (e >= 0) { | 13 if (e >= 0) { |
| 12 » » m = 0x007fffff >> e; | 14 m = 0x007fffff >> e; |
| 13 » » if ((u.i & m) == 0) | 15 if ((u.i & m) == 0) |
| 14 » » » return x; | 16 return x; |
| 15 » » FORCE_EVAL(x + 0x1p120f); | 17 FORCE_EVAL(x + 0x1p120f); |
| 16 » » if (u.i >> 31) | 18 if (u.i >> 31) |
| 17 » » » u.i += m; | 19 u.i += m; |
| 18 » » u.i &= ~m; | 20 u.i &= ~m; |
| 19 » } else { | 21 } else { |
| 20 » » FORCE_EVAL(x + 0x1p120f); | 22 FORCE_EVAL(x + 0x1p120f); |
| 21 » » if (u.i >> 31 == 0) | 23 if (u.i >> 31 == 0) |
| 22 » » » u.i = 0; | 24 u.i = 0; |
| 23 » » else if (u.i << 1) | 25 else if (u.i << 1) |
| 24 » » » u.f = -1.0; | 26 u.f = -1.0; |
| 25 » } | 27 } |
| 26 » return u.f; | 28 return u.f; |
| 27 } | 29 } |
| OLD | NEW |