| OLD | NEW | 
|---|
| 1 #include "libm.h" | 1 #include "libm.h" | 
| 2 | 2 | 
| 3 #if FLT_EVAL_METHOD==0 | 3 #if FLT_EVAL_METHOD == 0 | 
| 4 #define EPS FLT_EPSILON | 4 #define EPS FLT_EPSILON | 
| 5 #elif FLT_EVAL_METHOD==1 | 5 #elif FLT_EVAL_METHOD == 1 | 
| 6 #define EPS DBL_EPSILON | 6 #define EPS DBL_EPSILON | 
| 7 #elif FLT_EVAL_METHOD==2 | 7 #elif FLT_EVAL_METHOD == 2 | 
| 8 #define EPS LDBL_EPSILON | 8 #define EPS LDBL_EPSILON | 
| 9 #endif | 9 #endif | 
| 10 static const float_t toint = 1/EPS; | 10 static const float_t toint = 1 / EPS; | 
| 11 | 11 | 
| 12 float roundf(float x) | 12 float roundf(float x) { | 
| 13 { | 13   union { | 
| 14 »       union {float f; uint32_t i;} u = {x}; | 14     float f; | 
| 15 »       int e = u.i >> 23 & 0xff; | 15     uint32_t i; | 
| 16 »       float_t y; | 16   } u = {x}; | 
|  | 17   int e = u.i >> 23 & 0xff; | 
|  | 18   float_t y; | 
| 17 | 19 | 
| 18 »       if (e >= 0x7f+23) | 20   if (e >= 0x7f + 23) | 
| 19 »       »       return x; | 21     return x; | 
| 20 »       if (u.i >> 31) | 22   if (u.i >> 31) | 
| 21 »       »       x = -x; | 23     x = -x; | 
| 22 »       if (e < 0x7f-1) { | 24   if (e < 0x7f - 1) { | 
| 23 »       »       FORCE_EVAL(x + toint); | 25     FORCE_EVAL(x + toint); | 
| 24 »       »       return 0*u.f; | 26     return 0 * u.f; | 
| 25 »       } | 27   } | 
| 26 »       y = x + toint - toint - x; | 28   y = x + toint - toint - x; | 
| 27 »       if (y > 0.5f) | 29   if (y > 0.5f) | 
| 28 »       »       y = y + x - 1; | 30     y = y + x - 1; | 
| 29 »       else if (y <= -0.5f) | 31   else if (y <= -0.5f) | 
| 30 »       »       y = y + x + 1; | 32     y = y + x + 1; | 
| 31 »       else | 33   else | 
| 32 »       »       y = y + x; | 34     y = y + x; | 
| 33 »       if (u.i >> 31) | 35   if (u.i >> 31) | 
| 34 »       »       y = -y; | 36     y = -y; | 
| 35 »       return y; | 37   return y; | 
| 36 } | 38 } | 
| OLD | NEW | 
|---|