From 8475ab16848cf2adb6ce3446749c2f1d10233286 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Wed, 24 Jun 2015 15:12:03 +0000 Subject: Fix ldbl-128 expl missing underflows (bug 18586). Similar to various other bugs in this area, the ldbl-128 expl implementation does not raise the underflow exception for all subnormal results, if the scaling down is exact although the actual result is inexact. This patch fixes this by forcing the exception in this case (the tests that failed before and pass after the test are already in the testsuite). Tested for mips64. [BZ #18586] * sysdeps/ieee754/ldbl-128/e_expl.c (__ieee754_expl): Force underflow exception for small results. --- sysdeps/ieee754/ldbl-128/e_expl.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'sysdeps/ieee754/ldbl-128') diff --git a/sysdeps/ieee754/ldbl-128/e_expl.c b/sysdeps/ieee754/ldbl-128/e_expl.c index b4b789658a..1cd095cb77 100644 --- a/sysdeps/ieee754/ldbl-128/e_expl.c +++ b/sysdeps/ieee754/ldbl-128/e_expl.c @@ -230,7 +230,15 @@ __ieee754_expl (long double x) if (!unsafe) return result; else - return result * scale_u.d; + { + result *= scale_u.d; + if (result < LDBL_MIN) + { + long double force_underflow = result * result; + math_force_eval (force_underflow); + } + return result; + } } /* Exceptional cases: */ else if (isless (x, himark)) -- cgit 1.4.1