unofficial mirror of libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* fix inaccuracy of j0f for x >= 2^127 when sin(x)+cos(x) is tiny (v4)
  2020-07-30  8:53                 ` Florian Weimer via Libc-alpha
@ 2020-08-03 13:19                   ` Paul Zimmermann
  0 siblings, 0 replies; 6+ messages in thread
From: Paul Zimmermann @ 2020-08-03 13:19 UTC (permalink / raw)
  To: Florian Weimer; +Cc: libc-alpha

       Dear Florian,

> I suggest to leave it at 6, other CPU variants may still need the 6
> there.

here is a new version.

Paul

From 971c832c2087e9463951d1b07b48d4d9a998e8c0 Mon Sep 17 00:00:00 2001
From: Paul Zimmermann <Paul.Zimmermann@inria.fr>
Date: Mon, 3 Aug 2020 15:16:39 +0200
Subject: [PATCH] fix inaccuracy of j0f for x >= 2^127 when sin(x)+cos(x) is
 tiny (v4)

---
 math/auto-libm-test-in         |  2 ++
 sysdeps/ieee754/flt-32/e_j0f.c | 17 ++++++++++++++++-
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in
index 4414e54d93..5d488a8711 100644
--- a/math/auto-libm-test-in
+++ b/math/auto-libm-test-in
@@ -5748,6 +5748,8 @@ j0 0x1p16382
 j0 0x1p16383
 # the next value generates larger error bounds on x86_64 (binary32)
 j0 0x2.602774p+0 xfail-rounding:ibm128-libgcc
+# the next value exercises the flt-32 code path for x >= 2^127
+j0 0x8.2f4ecp+124
 
 j1 -1.0
 j1 0.0
diff --git a/sysdeps/ieee754/flt-32/e_j0f.c b/sysdeps/ieee754/flt-32/e_j0f.c
index c89b9f2688..91e8de8fe3 100644
--- a/sysdeps/ieee754/flt-32/e_j0f.c
+++ b/sysdeps/ieee754/flt-32/e_j0f.c
@@ -55,7 +55,22 @@ __ieee754_j0f(float x)
 		    z = -__cosf(x+x);
 		    if ((s*c)<zero) cc = z/ss;
 		    else	    ss = z/cc;
-		}
+		} else {
+                  /* We subtract (exactly) a value x0 such that cos(x0)+sin(x0)
+                     is very near to 0, and use the identity
+                     sin(x-x0) = sin(x)*cos(x0)-cos(x)*sin(x0) to get
+                     sin(x) + cos(x) with extra accuracy. */
+                  float x0 = 0xe.d4108p+124f;
+                  float y = x - x0; /* exact */
+                  /* sin(y) = sin(x)*cos(x0)-cos(x)*sin(x0) */
+                  z = __sinf (y);
+                  float eps = 0x1.5f263ep-24f;
+                  /* cos(x0) ~ -sin(x0) + eps */
+                  z += eps * __cosf (x);
+                  /* now z ~ (sin(x)-cos(x))*cos(x0) */
+                  float cosx0 = -0xb.504f3p-4f;
+                  cc = z / cosx0;
+                }
 	/*
 	 * j0(x) = 1/sqrt(pi) * (P(0,x)*cc - Q(0,x)*ss) / sqrt(x)
 	 * y0(x) = 1/sqrt(pi) * (P(0,x)*ss + Q(0,x)*cc) / sqrt(x)
-- 
2.27.0



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

* fix inaccuracy of j0f for x >= 2^127 when sin(x)+cos(x) is tiny (v4)
@ 2020-08-07 11:25 Paul Zimmermann
  2020-08-07 19:33 ` Adhemerval Zanella via Libc-alpha
  0 siblings, 1 reply; 6+ messages in thread
From: Paul Zimmermann @ 2020-08-07 11:25 UTC (permalink / raw)
  To: libc-alpha

ping: https://sourceware.org/pipermail/libc-alpha/2020-August/116806.html

Have a nice week-end,
Paul

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

* Re: fix inaccuracy of j0f for x >= 2^127 when sin(x)+cos(x) is tiny (v4)
  2020-08-07 11:25 fix inaccuracy of j0f for x >= 2^127 when sin(x)+cos(x) is tiny (v4) Paul Zimmermann
@ 2020-08-07 19:33 ` Adhemerval Zanella via Libc-alpha
  2020-08-07 20:30   ` Joseph Myers
  0 siblings, 1 reply; 6+ messages in thread
From: Adhemerval Zanella via Libc-alpha @ 2020-08-07 19:33 UTC (permalink / raw)
  To: Paul Zimmermann, libc-alpha



On 07/08/2020 08:25, Paul Zimmermann wrote:
> ping: https://sourceware.org/pipermail/libc-alpha/2020-August/116806.html
> 
> Have a nice week-end,
> Paul
> 

LGTM and I pushed it upstream with some minor fixes (I fixed the indentation
to match the rest of the file, added double space prior comment endding and
adjust one line that surpassed the 78 column limit).

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

* Re: fix inaccuracy of j0f for x >= 2^127 when sin(x)+cos(x) is tiny (v4)
  2020-08-07 19:33 ` Adhemerval Zanella via Libc-alpha
@ 2020-08-07 20:30   ` Joseph Myers
  2020-08-08 19:53     ` Adhemerval Zanella via Libc-alpha
  0 siblings, 1 reply; 6+ messages in thread
From: Joseph Myers @ 2020-08-07 20:30 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

On Fri, 7 Aug 2020, Adhemerval Zanella via Libc-alpha wrote:

> On 07/08/2020 08:25, Paul Zimmermann wrote:
> > ping: https://sourceware.org/pipermail/libc-alpha/2020-August/116806.html
> > 
> > Have a nice week-end,
> > Paul
> > 
> 
> LGTM and I pushed it upstream with some minor fixes (I fixed the indentation
> to match the rest of the file, added double space prior comment endding and
> adjust one line that surpassed the 78 column limit).

That commit is missing the regeneration of auto-libm-test-out-j0.

-- 
Joseph S. Myers
joseph@codesourcery.com

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

* Re: fix inaccuracy of j0f for x >= 2^127 when sin(x)+cos(x) is tiny (v4)
  2020-08-07 20:30   ` Joseph Myers
@ 2020-08-08 19:53     ` Adhemerval Zanella via Libc-alpha
  2020-08-11 11:31       ` Paul Zimmermann
  0 siblings, 1 reply; 6+ messages in thread
From: Adhemerval Zanella via Libc-alpha @ 2020-08-08 19:53 UTC (permalink / raw)
  To: Joseph Myers; +Cc: libc-alpha



On 07/08/2020 17:30, Joseph Myers wrote:
> On Fri, 7 Aug 2020, Adhemerval Zanella via Libc-alpha wrote:
> 
>> On 07/08/2020 08:25, Paul Zimmermann wrote:
>>> ping: https://sourceware.org/pipermail/libc-alpha/2020-August/116806.html
>>>
>>> Have a nice week-end,
>>> Paul
>>>
>>
>> LGTM and I pushed it upstream with some minor fixes (I fixed the indentation
>> to match the rest of the file, added double space prior comment endding and
>> adjust one line that surpassed the 78 column limit).
> 
> That commit is missing the regeneration of auto-libm-test-out-j0.
> 

Done, I also updated both x86_64 and i686 ulp files that resulted from the
the new test.

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

* Re: fix inaccuracy of j0f for x >= 2^127 when sin(x)+cos(x) is tiny (v4)
  2020-08-08 19:53     ` Adhemerval Zanella via Libc-alpha
@ 2020-08-11 11:31       ` Paul Zimmermann
  0 siblings, 0 replies; 6+ messages in thread
From: Paul Zimmermann @ 2020-08-11 11:31 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha, joseph

       Dear Joseph, Dear Adhemerval,

sorry for that, I'll try to remember next time to regenerate the
auto-libm-test-out-xxx file and to check the ulp files.

Paul

> From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
> Date: Sat, 8 Aug 2020 16:53:45 -0300
> 
> On 07/08/2020 17:30, Joseph Myers wrote:
> > On Fri, 7 Aug 2020, Adhemerval Zanella via Libc-alpha wrote:
> > 
> >> On 07/08/2020 08:25, Paul Zimmermann wrote:
> >>> ping: https://sourceware.org/pipermail/libc-alpha/2020-August/116806.html
> >>>
> >>> Have a nice week-end,
> >>> Paul
> >>>
> >>
> >> LGTM and I pushed it upstream with some minor fixes (I fixed the indentation
> >> to match the rest of the file, added double space prior comment endding and
> >> adjust one line that surpassed the 78 column limit).
> > 
> > That commit is missing the regeneration of auto-libm-test-out-j0.
> > 
> 
> Done, I also updated both x86_64 and i686 ulp files that resulted from the
> the new test.
> 

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

end of thread, other threads:[~2020-08-11 11:31 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-07 11:25 fix inaccuracy of j0f for x >= 2^127 when sin(x)+cos(x) is tiny (v4) Paul Zimmermann
2020-08-07 19:33 ` Adhemerval Zanella via Libc-alpha
2020-08-07 20:30   ` Joseph Myers
2020-08-08 19:53     ` Adhemerval Zanella via Libc-alpha
2020-08-11 11:31       ` Paul Zimmermann
  -- strict thread matches above, loose matches on Subject: below --
2020-07-27 17:15 fix inaccuracy of j0f for x >= 2^127 when sin(x)+cos(x) is tiny Paul Zimmermann
2020-07-27 21:35 ` Joseph Myers
2020-07-28  8:23   ` Paul Zimmermann
2020-07-28  9:19     ` Andreas Schwab
2020-07-28 10:50       ` Paul Zimmermann
2020-07-28 18:09         ` Adhemerval Zanella via Libc-alpha
2020-07-29  7:03           ` fix inaccuracy of j0f for x >= 2^127 when sin(x)+cos(x) is tiny (v2) Paul Zimmermann
2020-07-29 20:25             ` Adhemerval Zanella via Libc-alpha
2020-07-30  7:20               ` fix inaccuracy of j0f for x >= 2^127 when sin(x)+cos(x) is tiny (v3) Paul Zimmermann
2020-07-30  8:53                 ` Florian Weimer via Libc-alpha
2020-08-03 13:19                   ` fix inaccuracy of j0f for x >= 2^127 when sin(x)+cos(x) is tiny (v4) Paul Zimmermann

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).