This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: Fix ldbl-128ibm sinhl inaccuracy near 0 (bug 18789) [committed]
- From: Steven Munroe <munroesj at linux dot vnet dot ibm dot com>
- To: Joseph Myers <joseph at codesourcery dot com>
- Cc: libc-alpha at sourceware dot org
- Date: Wed, 12 Aug 2015 17:00:56 -0500
- Subject: Re: Fix ldbl-128ibm sinhl inaccuracy near 0 (bug 18789) [committed]
- Authentication-results: sourceware.org; auth=none
- References: <alpine dot DEB dot 2 dot 10 dot 1508101525360 dot 24619 at digraph dot polyomino dot org dot uk>
- Reply-to: munroesj at linux dot vnet dot ibm dot com
On Mon, 2015-08-10 at 15:26 +0000, Joseph Myers wrote:
> ldbl-128ibm sinhl uses a too-big threshold to decide when to return
> the argument, resulting in large errors. This patch fixes it to use a
> more appropriate threshold.
>
> Tested for x86_64, x86 and powerpc. Committed.
>
> (auto-libm-test-out diffs omitted below.)
>
> 2015-08-10 Joseph Myers <joseph@codesourcery.com>
>
> [BZ #18789]
> * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c (__ieee754_sinhl): Use
> smaller threshold for returning the argument.
> * math/auto-libm-test-in: Add more tests of sinh.
> * math/auto-libm-test-out: Regenerated.
> * sysdeps/i386/fpu/libm-test-ulps: Update.
> snip ..
> diff --git a/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c b/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c
> index 08e5d86..00115df 100644
> --- a/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c
> +++ b/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c
> @@ -53,7 +53,7 @@ __ieee754_sinhl(long double x)
> if (jx<0) h = -h;
> /* |x| in [0,40], return sign(x)*0.5*(E+E/(E+1))) */
> if (ix < 0x4044000000000000LL) { /* |x|<40 */
> - if (ix<0x3e20000000000000LL) { /* |x|<2**-29 */
> + if (ix<0x3c90000000000000LL) { /* |x|<2**-54 */
> if (fabsl (x) < LDBL_MIN)
> {
> long double force_underflow = x * x;
>
This looks like a thinko form the original ldbl-128ibm port.
Thanks for catching this.