This is the mail archive of the libc-alpha@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]

Re: Fix ldbl-128ibm sinhl inaccuracy near 0 (bug 18789) [committed]


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.


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