diff options
author | Joseph Myers <joseph@codesourcery.com> | 2015-06-21 18:43:10 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2015-06-21 18:43:10 +0000 |
commit | cb0937b299182e78307795081489ec1f148bdbd7 (patch) | |
tree | 32137f8b8dde65185697602763252a45e40e8472 /math/auto-libm-test-in | |
parent | fea1d8d67363c8b675a4c2533769ae12dc86efff (diff) | |
download | glibc-cb0937b299182e78307795081489ec1f148bdbd7.tar.gz glibc-cb0937b299182e78307795081489ec1f148bdbd7.tar.xz glibc-cb0937b299182e78307795081489ec1f148bdbd7.zip |
Fix x86_64 / x86 expm1l (-min_subnorm) result sign (bug 18569).
In the x86 / x86_64 implementations of expm1l, when expm1l's result should underflow to 0 (argument minus the least subnormal, in some rounding modes), it can be a zero of the wrong sign. This patch fixes this by returning the argument with underflow forced in that case (this is a 1ulp error relative to the correctly rounded result of -0, which is OK in terms of the documented accuracy goals, whereas a result with the wrong sign never is). Tested for x86_64 and x86. [BZ #18569] * sysdeps/i386/fpu/e_expl.S (IEEE754_EXPL) [USE_AS_EXPM1L]: Force underflow and return argument in case of subnormal argument. * sysdeps/x86_64/fpu/e_expl.S (IEEE754_EXPL) [USE_AS_EXPM1L]: Likewise. * math/auto-libm-test-in: Add more tests of expm1. * math/auto-libm-test-out: Regenerated.
Diffstat (limited to 'math/auto-libm-test-in')
-rw-r--r-- | math/auto-libm-test-in | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in index e8e4da62b8..6b054597f1 100644 --- a/math/auto-libm-test-in +++ b/math/auto-libm-test-in @@ -1364,6 +1364,10 @@ expm1 0x5.fb8dc64e91a74p-4 expm1 0x3.735f497c4e67535cp-4 # Bug 16353: underflow exception may be missing expm1 0x4.0000000000000028p-16384 missing-underflow +expm1 min missing-underflow +expm1 -min missing-underflow +expm1 min_subnorm missing-underflow +expm1 -min_subnorm missing-underflow fma 1.0 2.0 3.0 fma 1.25 0.75 0.0625 |