This is the mail archive of the
glibc-bugs@sourceware.org
mailing list for the glibc project.
[Bug math/16293] x86 / x86_64 expm1 inaccurate near 0 in directed rounding modes
- From: "cvs-commit at gcc dot gnu.org" <sourceware-bugzilla at sourceware dot org>
- To: glibc-bugs at sourceware dot org
- Date: Thu, 19 Dec 2013 13:36:53 +0000
- Subject: [Bug math/16293] x86 / x86_64 expm1 inaccurate near 0 in directed rounding modes
- Auto-submitted: auto-generated
- References: <bug-16293-131 at http dot sourceware dot org/bugzilla/>
http://sourceware.org/bugzilla/show_bug.cgi?id=16293
--- Comment #1 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via f88acd39da2a509081e541b84ecbf204ef20f9e8 (commit)
from c688b4196014e0162a1ff11120f6c9516be0c6cb (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=f88acd39da2a509081e541b84ecbf204ef20f9e8
commit f88acd39da2a509081e541b84ecbf204ef20f9e8
Author: Joseph Myers <joseph@codesourcery.com>
Date: Thu Dec 19 13:36:10 2013 +0000
Fix x86/x86_64 expm1 inaccuracy near 0 in directed rounding modes (bug
16293).
Bug 16293 is inaccuracy of x86/x86_64 versions of expm1, near 0 in
directed rounding modes, that arises from frndint rounding the
exponent to 1 or -1 instead of 0, resulting in large cancellation
error. This inaccuracy in turn affects other functions such as sinh
that use expm1. This patch fixes the problem by setting
round-to-nearest mode temporarily around the affected calls to
frndint. I don't think this is needed for other uses of frndint, such
as in exp itself, as only for expm1 is the cancellation error
significant.
Tested x86_64 and x86 and ulps updated accordingly.
* sysdeps/i386/fpu/e_expl.S (IEEE754_EXPL) [USE_AS_EXPM1L]: Set
round-to-nearest mode when using frndint.
* sysdeps/i386/fpu/s_expm1.S (__expm1): Likewise.
* sysdeps/i386/fpu/s_expm1f.S (__expm1f): Likewise.
* sysdeps/x86_64/fpu/e_expl.S (IEEE754_EXPL) [USE_AS_EXPM1L]:
Likewise.
* math/auto-libm-test-in: Add more tests of expm1. Do not expect
sinh test to fail.
* math/auto-libm-test-out: Regenerated.
* math/libm-test.inc (TEST_COND_x86_64): Remove macro.
(TEST_COND_x86): Likewise.
(expm1_tonearest_test_data): New array.
(expm1_test_tonearest): New function.
(expm1_towardzero_test_data): New array.
(expm1_test_towardzero): New function.
(expm1_downward_test_data): New array.
(expm1_test_downward): New function.
(expm1_upward_test_data): New array.
(expm1_test_upward): New function.
(main): Run the new test functions.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 24 ++
NEWS | 2 +-
math/auto-libm-test-in | 19 ++-
math/auto-libm-test-out | 450 ++++++++++++++++++++++++++++++++++--
math/libm-test.inc | 72 +++++-
sysdeps/i386/fpu/e_expl.S | 15 ++
sysdeps/i386/fpu/libm-test-ulps | 375 ++++++++++++++++++++++++++++++
sysdeps/i386/fpu/s_expm1.S | 11 +
sysdeps/i386/fpu/s_expm1f.S | 11 +
sysdeps/x86_64/fpu/e_expl.S | 11 +
sysdeps/x86_64/fpu/libm-test-ulps | 319 ++++++++++++++++++++++++++
11 files changed, 1269 insertions(+), 40 deletions(-)
--
You are receiving this mail because:
You are on the CC list for the bug.