X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fmath%2Froundf.c;h=e8210af5621aa392543616d308200ddb22523281;hb=c5f4b2dfea320356f69445dc1adf8f73596a3c36;hp=c6b277979038e0abd5ddc566342e674c8d570810;hpb=d1a2ead878c27ac4ec600740320f8b76e1f961e9;p=musl 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)