diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/msun/src/s_rintl.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/msun/src/s_rintl.c b/lib/msun/src/s_rintl.c index b2a85b6..7f3b444e 100644 --- a/lib/msun/src/s_rintl.c +++ b/lib/msun/src/s_rintl.c @@ -44,6 +44,7 @@ shift[2] = { #error "Unsupported long double format" #endif }; +static const float zero[2] = { 0.0, -0.0 }; long double rintl(long double x) @@ -74,7 +75,8 @@ rintl(long double x) * If the result is +-0, then it must have the same sign as x, but * the above calculation doesn't always give this. Fix up the sign. */ - if (x == 0.0L) - return (sign ? -0.0L : 0.0L); + if (u.bits.exp < BIAS && x == 0.0L) + return (zero[sign]); + return (x); } |