Fix ldbl-128ibm asinhl inaccuracy (bug 16385).

This patch fixes bug 16385, ldbl-128ibm asinhl inaccuracy, which
showed up while attempting to regenerate ulps for powerpc-nofpu for
2.19.  The problem here was use of fabs instead of fabsl meaning large
arguments were reduced to the precision of double.  Tested for
powerpc-nofpu.

	* sysdeps/ieee754/ldbl-128ibm/s_asinhl.c (__asinhl): Use fabsl not
	fabs.
This commit is contained in:
Joseph Myers 2014-01-02 16:34:24 +00:00
parent 396e3ecf3e
commit 90b6a1e55f
3 changed files with 6 additions and 2 deletions

View File

@ -1,5 +1,9 @@
2014-01-02 Joseph Myers <joseph@codesourcery.com> 2014-01-02 Joseph Myers <joseph@codesourcery.com>
[BZ #16385]
* sysdeps/ieee754/ldbl-128ibm/s_asinhl.c (__asinhl): Use fabsl not
fabs.
[BZ #16384] [BZ #16384]
* sysdeps/ieee754/ldbl-128ibm/e_acoshl.c (ln2): Initialize with * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c (ln2): Initialize with
M_LN2l. M_LN2l.

2
NEWS
View File

@ -23,7 +23,7 @@ Version 2.19
16038, 16041, 16055, 16071, 16072, 16074, 16077, 16078, 16103, 16112, 16038, 16041, 16055, 16071, 16072, 16074, 16077, 16078, 16103, 16112,
16143, 16144, 16146, 16150, 16151, 16153, 16167, 16172, 16195, 16214, 16143, 16144, 16146, 16150, 16151, 16153, 16167, 16172, 16195, 16214,
16245, 16271, 16274, 16283, 16289, 16293, 16314, 16316, 16330, 16337, 16245, 16271, 16274, 16283, 16289, 16293, 16314, 16316, 16330, 16337,
16338, 16356, 16365, 16366, 16369, 16372, 16375, 16379, 16384. 16338, 16356, 16365, 16366, 16369, 16372, 16375, 16379, 16384, 16385.
* Slovenian translations for glibc messages have been contributed by the * Slovenian translations for glibc messages have been contributed by the
Translation Project's Slovenian team of translators. Translation Project's Slovenian team of translators.

View File

@ -48,7 +48,7 @@ long double __asinhl(long double x)
if(huge+x>one) return x; /* return x inexact except 0 */ if(huge+x>one) return x; /* return x inexact except 0 */
} }
if(ix>0x41b0000000000000LL) { /* |x| > 2**28 */ if(ix>0x41b0000000000000LL) { /* |x| > 2**28 */
w = __ieee754_logl(fabs(x))+ln2; w = __ieee754_logl(fabsl(x))+ln2;
} else if (ix>0x4000000000000000LL) { /* 2**28 > |x| > 2.0 */ } else if (ix>0x4000000000000000LL) { /* 2**28 > |x| > 2.0 */
t = fabs(x); t = fabs(x);
w = __ieee754_logl(2.0*t+one/(__ieee754_sqrtl(x*x+one)+t)); w = __ieee754_logl(2.0*t+one/(__ieee754_sqrtl(x*x+one)+t));