public inbox for glibc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug math/18613] New: tgamma inaccurate in non-default rounding modes
@ 2015-06-29 21:06 jsm28 at gcc dot gnu.org
  2015-06-29 23:30 ` [Bug math/18613] " cvs-commit at gcc dot gnu.org
  2015-06-29 23:31 ` jsm28 at gcc dot gnu.org
  0 siblings, 2 replies; 3+ messages in thread
From: jsm28 at gcc dot gnu.org @ 2015-06-29 21:06 UTC (permalink / raw)
  To: glibc-bugs

https://sourceware.org/bugzilla/show_bug.cgi?id=18613

            Bug ID: 18613
           Summary: tgamma inaccurate in non-default rounding modes
           Product: glibc
           Version: 2.21
            Status: NEW
          Severity: normal
          Priority: P2
         Component: math
          Assignee: unassigned at sourceware dot org
          Reporter: jsm28 at gcc dot gnu.org
  Target Milestone: ---

In non-default rounding modes, tgamma can be slightly less accurate than
permitted by glibc's accuracy goals, e.g. for double on x86_64:

Failure: Test: tgamma_towardzero (-0x6.fe4638p+0)
Result:
 is:         -2.98383122695617016006e-02  -0x1.e8def3d7660a50000000p-6
 should be:  -2.98383122695616634367e-02  -0x1.e8def3d76609a0000000p-6
 difference:  3.81639164714897560770e-17   0x1.60000000000000000000p-55
 ulp       :  11.0000
 max.ulp   :  0.0000

-- 
You are receiving this mail because:
You are on the CC list for the bug.


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [Bug math/18613] tgamma inaccurate in non-default rounding modes
  2015-06-29 21:06 [Bug math/18613] New: tgamma inaccurate in non-default rounding modes jsm28 at gcc dot gnu.org
@ 2015-06-29 23:30 ` cvs-commit at gcc dot gnu.org
  2015-06-29 23:31 ` jsm28 at gcc dot gnu.org
  1 sibling, 0 replies; 3+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2015-06-29 23:30 UTC (permalink / raw)
  To: glibc-bugs

https://sourceware.org/bugzilla/show_bug.cgi?id=18613

--- 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  e02920bc029019443326eecaa7b267b78ff2892e (commit)
      from  4aa10d01b654b7395c6e856b8e1e0959cfc80739 (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=e02920bc029019443326eecaa7b267b78ff2892e

commit e02920bc029019443326eecaa7b267b78ff2892e
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Mon Jun 29 23:29:35 2015 +0000

    Improve tgamma accuracy (bug 18613).

    In non-default rounding modes, tgamma can be slightly less accurate
    than permitted by glibc's accuracy goals.

    Part of the problem is error accumulation, addressed in this patch by
    setting round-to-nearest for internal computations.  However, there
    was also a bug in the code dealing with computing pow (x + n, x + n)
    where x + n is not exactly representable, providing another source of
    error even in round-to-nearest mode; it was necessary to address both
    bugs to get errors for all testcases within glibc's accuracy goals.
    Given this second fix, accuracy in round-to-nearest mode is also
    improved (hence regeneration of ulps for tgamma should be from scratch
    - truncate libm-test-ulps or at least remove existing tgamma entries -
    so that the expected ulps can be reduced).

    Some additional complications also arose.  Certain tgamma tests should
    strictly, according to IEEE semantics, overflow or not depending on
    the rounding mode; this is beyond the scope of glibc's accuracy goals
    for any function without exactly-determined results, but
    gen-auto-libm-tests doesn't handle being lax there as it does for
    underflow.  (libm-test.inc also doesn't handle being lax about whether
    the result in cases very close to the overflow threshold is infinity
    or a finite value close to overflow, but that doesn't cause problems
    in this case though I've seen it cause problems with random test
    generation for some functions.)  Thus, spurious-overflow markings,
    with a comment, are added to auto-libm-test-in (no bug in Bugzilla
    because the issue is with the testsuite, not a user-visible bug in
    glibc).  And on x86, after the patch I saw ERANGE issues as previously
    reported by Carlos (see my commentary in
    <https://sourceware.org/ml/libc-alpha/2015-01/msg00485.html>), which
    needed addressing by ensuring excess range and precision were
    eliminated at various points if FLT_EVAL_METHOD != 0.

    I also noticed and fixed a cosmetic issue where 1.0f was used in long
    double functions and should have been 1.0L.

    This completes the move of all functions to testing in all rounding
    modes with ALL_RM_TEST, so gen-libm-have-vector-test.sh is updated to
    remove the workaround for some functions not using ALL_RM_TEST.

    Tested for x86_64, x86, mips64 and powerpc.

        [BZ #18613]
        * sysdeps/ieee754/dbl-64/e_gamma_r.c (gamma_positive): Take log of
        X_ADJ not X when adjusting exponent.
        (__ieee754_gamma_r): Do intermediate computations in
        round-to-nearest then adjust overflowing and underflowing results
        as needed.
        * sysdeps/ieee754/flt-32/e_gammaf_r.c (gammaf_positive): Take log
        of X_ADJ not X when adjusting exponent.
        (__ieee754_gammaf_r): Do intermediate computations in
        round-to-nearest then adjust overflowing and underflowing results
        as needed.
        * sysdeps/ieee754/ldbl-128/e_gammal_r.c (gammal_positive): Take
        log of X_ADJ not X when adjusting exponent.
        (__ieee754_gammal_r): Do intermediate computations in
        round-to-nearest then adjust overflowing and underflowing results
        as needed.  Use 1.0L not 1.0f as numerator of division.
        * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c (gammal_positive): Take
        log of X_ADJ not X when adjusting exponent.
        (__ieee754_gammal_r): Do intermediate computations in
        round-to-nearest then adjust overflowing and underflowing results
        as needed.  Use 1.0L not 1.0f as numerator of division.
        * sysdeps/ieee754/ldbl-96/e_gammal_r.c (gammal_positive): Take log
        of X_ADJ not X when adjusting exponent.
        (__ieee754_gammal_r): Do intermediate computations in
        round-to-nearest then adjust overflowing and underflowing results
        as needed.  Use 1.0L not 1.0f as numerator of division.
        * math/libm-test.inc (tgamma_test_data): Remove one test.  Moved
        to auto-libm-test-in.
        (tgamma_test): Use ALL_RM_TEST.
        * math/auto-libm-test-in: Add one test of tgamma.  Mark some other
        tests of tgamma with spurious-overflow.
        * math/auto-libm-test-out: Regenerated.
        * math/gen-libm-have-vector-test.sh: Do not check for START.
        * sysdeps/i386/fpu/libm-test-ulps: Update.
        * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                |   36 ++++
 NEWS                                     |    2 +-
 math/auto-libm-test-in                   |   10 +-
 math/auto-libm-test-out                  |  263 +++++++++++++++++++-----------
 math/gen-libm-have-vector-test.sh        |    8 -
 math/libm-test.inc                       |    5 +-
 sysdeps/i386/fpu/libm-test-ulps          |   36 ++++-
 sysdeps/ieee754/dbl-64/e_gamma_r.c       |   87 +++++++---
 sysdeps/ieee754/flt-32/e_gammaf_r.c      |   88 +++++++---
 sysdeps/ieee754/ldbl-128/e_gammal_r.c    |   74 ++++++---
 sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c |   74 ++++++---
 sysdeps/ieee754/ldbl-96/e_gammal_r.c     |   74 ++++++---
 sysdeps/x86_64/fpu/libm-test-ulps        |   32 +++-
 13 files changed, 540 insertions(+), 249 deletions(-)

-- 
You are receiving this mail because:
You are on the CC list for the bug.


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [Bug math/18613] tgamma inaccurate in non-default rounding modes
  2015-06-29 21:06 [Bug math/18613] New: tgamma inaccurate in non-default rounding modes jsm28 at gcc dot gnu.org
  2015-06-29 23:30 ` [Bug math/18613] " cvs-commit at gcc dot gnu.org
@ 2015-06-29 23:31 ` jsm28 at gcc dot gnu.org
  1 sibling, 0 replies; 3+ messages in thread
From: jsm28 at gcc dot gnu.org @ 2015-06-29 23:31 UTC (permalink / raw)
  To: glibc-bugs

https://sourceware.org/bugzilla/show_bug.cgi?id=18613

Joseph Myers <jsm28 at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|---                         |FIXED

--- Comment #2 from Joseph Myers <jsm28 at gcc dot gnu.org> ---
Fixed for 2.22.

-- 
You are receiving this mail because:
You are on the CC list for the bug.


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2015-06-29 23:31 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-06-29 21:06 [Bug math/18613] New: tgamma inaccurate in non-default rounding modes jsm28 at gcc dot gnu.org
2015-06-29 23:30 ` [Bug math/18613] " cvs-commit at gcc dot gnu.org
2015-06-29 23:31 ` jsm28 at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).