diff options
Diffstat (limited to 'src/math/roundf.c')
| -rw-r--r-- | src/math/roundf.c | 13 | 
1 files changed, 11 insertions, 2 deletions
| diff --git a/src/math/roundf.c b/src/math/roundf.c index c6b27797..e8210af5 100644 --- a/src/math/roundf.c +++ b/src/math/roundf.c @@ -1,5 +1,14 @@  #include "libm.h" +#if FLT_EVAL_METHOD==0 +#define EPS FLT_EPSILON +#elif FLT_EVAL_METHOD==1 +#define EPS DBL_EPSILON +#elif FLT_EVAL_METHOD==2 +#define EPS LDBL_EPSILON +#endif +static const float_t toint = 1/EPS; +  float roundf(float x)  {  	union {float f; uint32_t i;} u = {x}; @@ -11,10 +20,10 @@ float roundf(float x)  	if (u.i >> 31)  		x = -x;  	if (e < 0x7f-1) { -		FORCE_EVAL(x + 0x1p23f); +		FORCE_EVAL(x + toint);  		return 0*u.f;  	} -	y = (float)(x + 0x1p23f) - 0x1p23f - x; +	y = x + toint - toint - x;  	if (y > 0.5f)  		y = y + x - 1;  	else if (y <= -0.5f) | 
