This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH COMMITTED] Regenerate sparc ULPs.
- From: David Miller <davem at davemloft dot net>
- To: joseph at codesourcery dot com
- Cc: stli at linux dot vnet dot ibm dot com, libc-alpha at sourceware dot org
- Date: Mon, 28 Apr 2014 15:50:29 -0400 (EDT)
- Subject: Re: [PATCH COMMITTED] Regenerate sparc ULPs.
- Authentication-results: sourceware.org; auth=none
- References: <lig7ro$h9q$1 at ger dot gmane dot org> <20140414 dot 133656 dot 645482096251855460 dot davem at davemloft dot net> <Pine dot LNX dot 4 dot 64 dot 1404231505030 dot 13425 at digraph dot polyomino dot org dot uk>
From: "Joseph S. Myers" <joseph@codesourcery.com>
Date: Wed, 23 Apr 2014 15:07:11 +0000
> On Mon, 14 Apr 2014, David Miller wrote:
>
>> From: Stefan Liebler <stli@linux.vnet.ibm.com>
>> Date: Mon, 14 Apr 2014 10:56:24 +0200
>>
>> > on s390 test-ldouble / test-ildoubl shows the same ULP for y1(0x2p+0)
>> > (see https://www.sourceware.org/ml/libc-alpha/2014-04/msg00271.html).
>> >
>> > Please test the posted patch.
>>
>> Yep, it clears the long-double cases for me.
>>
>> I still have a large ULP of 10 for test-float's y1_upward().
>
> I'm going to guess that this doesn't appear on x86_64 because of the
> x86_64 implementation of trig functions using double precision internally
> so having smaller error accumulation than the generic flt-32 versions.
> Saving / restoring the rounding mode in y1f would seem a reasonable
> solution.
The following does the trick for me, any objections?
It would also be great if Stefan Liebler's bug fix at:
https://sourceware.org/ml/libc-alpha/2014-04/msg00148.html
got approved as well as that fixes the only other major math test
failure I was seeing on sparc.
Thanks!
2014-04-28 David S. Miller <davem@davemloft.net>
* sysdeps/ieee754/flt-32/e_j1f.c (__ieee754_y1f): Set
round-to-nearest internally in the "|x| >= 2.0" code paths to
reduce error accumulation.
diff --git a/sysdeps/ieee754/flt-32/e_j1f.c b/sysdeps/ieee754/flt-32/e_j1f.c
index cb9f97f..a180968 100644
--- a/sysdeps/ieee754/flt-32/e_j1f.c
+++ b/sysdeps/ieee754/flt-32/e_j1f.c
@@ -107,6 +107,7 @@ __ieee754_y1f(float x)
return -HUGE_VALF+x; /* -inf and overflow exception. */
if(__builtin_expect(hx<0, 0)) return zero/(zero*x);
if(ix >= 0x40000000) { /* |x| >= 2.0 */
+ SET_RESTORE_ROUNDF (FE_TONEAREST);
__sincosf (x, &s, &c);
ss = -s-c;
cc = s-c;