This is the mail archive of the glibc-bugs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug math/16293] x86 / x86_64 expm1 inaccurate near 0 in directed rounding modes


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]