X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmath%2Froundl.c;h=f4ff6820a982276321f6bfe8198e0975c7016017;hb=b72cd07f176b876aa51864d93aa8101477b1d732;hp=8f3f28b348e131fc2bc7f6c3098e398c75f75a67;hpb=d1a2ead878c27ac4ec600740320f8b76e1f961e9;p=musl diff --git a/src/math/roundl.c b/src/math/roundl.c index 8f3f28b3..f4ff6820 100644 --- a/src/math/roundl.c +++ b/src/math/roundl.c @@ -6,11 +6,9 @@ long double roundl(long double x) return round(x); } #elif (LDBL_MANT_DIG == 64 || LDBL_MANT_DIG == 113) && LDBL_MAX_EXP == 16384 -#if LDBL_MANT_DIG == 64 -#define TOINT 0x1p63 -#elif LDBL_MANT_DIG == 113 -#define TOINT 0x1p112 -#endif + +static const long double toint = 1/LDBL_EPSILON; + long double roundl(long double x) { union ldshape u = {x}; @@ -22,10 +20,10 @@ long double roundl(long double x) if (u.i.se >> 15) x = -x; if (e < 0x3fff-1) { - FORCE_EVAL(x + TOINT); + FORCE_EVAL(x + toint); return 0*u.f; } - y = x + TOINT - TOINT - x; + y = x + toint - toint - x; if (y > 0.5) y = y + x - 1; else if (y <= -0.5)