This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch master updated. glibc-2.24-199-g2bf4997
- From: siddhesh at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 30 Sep 2016 00:01:08 -0000
- Subject: GNU C Library master sources branch master updated. glibc-2.24-199-g2bf4997
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via 2bf499708daebd9ebb59a6d938a372c7f0ca4dce (commit)
via 3459931a1aed87b78a521b0eb931a465c1d101b2 (commit)
via a87b5e95adb97ffd33b2d15cf1a29221e4214500 (commit)
from b59ad2db99df74326ae28926299469eecce6f468 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=2bf499708daebd9ebb59a6d938a372c7f0ca4dce
commit 2bf499708daebd9ebb59a6d938a372c7f0ca4dce
Author: Siddhesh Poyarekar <siddhesh@sourceware.org>
Date: Fri Sep 30 05:19:05 2016 +0530
Use copysign instead of ternary for some sin/cos input ranges
These are remaining cases where we can deduce and conclude that the
sign of the result should be the same as the sign of the input being
checked. For example, for sin(x), the sign of the result is the same
as the result itself for x < pi. Likewise, for sine values where x
after range reduction falls into this range and its sign is preserved.
* sysdeps/ieee754/dbl-64/s_sin.c (do_sincos_1): Use copysign
instead of ternary condition.
(do_sincos_2): Likewise.
(__sin): Likewise.
(__cos): Likewise.
(slow): Likewise.
(sloww): Likewise.
(sloww1): Likewise.
(bsloww): Likewise.
(bsloww1): Likewise.
diff --git a/ChangeLog b/ChangeLog
index 7f51edd..9b0bff1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
2016-09-29 Siddhesh Poyarekar <siddhesh@sourceware.org>
+ * sysdeps/ieee754/dbl-64/s_sin.c (do_sincos_1): Use copysign
+ instead of ternary condition.
+ (do_sincos_2): Likewise.
+ (__sin): Likewise.
+ (__cos): Likewise.
+ (slow): Likewise.
+ (sloww): Likewise.
+ (sloww1): Likewise.
+ (bsloww): Likewise.
+ (bsloww1): Likewise.
+
* sysdeps/ieee754/dbl-64/s_sin.c (do_cos_slow): use copysign
instead of ternary condition.
(do_sin_slow): Likewise.
diff --git a/sysdeps/ieee754/dbl-64/s_sin.c b/sysdeps/ieee754/dbl-64/s_sin.c
index fef6780..8764c58 100644
--- a/sysdeps/ieee754/dbl-64/s_sin.c
+++ b/sysdeps/ieee754/dbl-64/s_sin.c
@@ -344,7 +344,7 @@ do_sincos_1 (double a, double da, double x, int4 n, int4 k)
{
res = do_sin (a, da, &cor);
cor = 1.035 * cor + __copysign (eps, cor);
- retval = ((res == res + cor) ? ((a > 0) ? res : -res)
+ retval = ((res == res + cor) ? __copysign (res, a)
: sloww1 (a, da, x, k));
}
break;
@@ -418,7 +418,7 @@ do_sincos_2 (double a, double da, double x, int4 n, int4 k)
{
res = do_sin (a, da, &cor);
cor = 1.035 * cor + __copysign (eps, cor);
- retval = ((res == res + cor) ? ((a > 0) ? res : -res)
+ retval = ((res == res + cor) ? __copysign (res, a)
: bsloww1 (a, da, x, n));
}
break;
@@ -479,7 +479,7 @@ __sin (double x)
{
res = do_sin (x, 0, &cor);
retval = (res == res + 1.096 * cor) ? res : slow1 (x);
- retval = m > 0 ? retval : -retval;
+ retval = __copysign (retval, x);
} /* else if (k < 0x3feb6000) */
/*----------------------- 0.855469 <|x|<2.426265 ----------------------*/
@@ -489,7 +489,7 @@ __sin (double x)
t = hp0 - fabs (x);
res = do_cos (t, hp1, &cor);
retval = (res == res + 1.020 * cor) ? res : slow2 (x);
- retval = m > 0 ? retval : -retval;
+ retval = __copysign (retval, x);
} /* else if (k < 0x400368fd) */
#ifndef IN_SINCOS
@@ -580,7 +580,7 @@ __cos (double x)
{
res = do_sin (a, da, &cor);
cor = 1.035 * cor + __copysign (1.0e-31, cor);
- retval = ((res == res + cor) ? ((a > 0) ? res : -res)
+ retval = ((res == res + cor) ? __copysign (res, a)
: sloww1 (a, da, x, 1));
}
@@ -634,9 +634,9 @@ slow (double x)
__dubsin (fabs (x), 0, w);
if (w[0] == w[0] + 1.000000001 * w[1])
- return (x > 0) ? w[0] : -w[0];
+ return __copysign (w[0], x);
- return (x > 0) ? __mpsin (x, 0, false) : -__mpsin (-x, 0, false);
+ return __copysign (__mpsin (fabs (x), 0, false), x);
}
/*******************************************************************************/
@@ -717,7 +717,7 @@ sloww (double x, double dx, double orig, int k)
cor = 1.000000001 * w[1] + __copysign (eps, w[1]);
if (w[0] == w[0] + cor)
- return (x > 0) ? w[0] : -w[0];
+ return __copysign (w[0], x);
t = (orig * hpinv + toint);
xn = t - toint;
@@ -743,7 +743,7 @@ sloww (double x, double dx, double orig, int k)
cor = 1.000000001 * w[1] + __copysign (eps, w[1]);
if (w[0] == w[0] + cor)
- return (a > 0) ? w[0] : -w[0];
+ return __copysign (w[0], a);
return k ? __mpcos (orig, 0, true) : __mpsin (orig, 0, true);
}
@@ -764,7 +764,7 @@ sloww1 (double x, double dx, double orig, int k)
res = do_sin_slow (x, dx, 3.1e-30 * fabs (orig), &cor);
if (res == res + cor)
- return (x > 0) ? res : -res;
+ return __copysign (res, x);
dx = (x > 0 ? dx : -dx);
__dubsin (fabs (x), dx, w);
@@ -773,7 +773,7 @@ sloww1 (double x, double dx, double orig, int k)
cor = 1.000000005 * w[1] + __copysign (eps, w[1]);
if (w[0] == w[0] + cor)
- return (x > 0) ? w[0] : -w[0];
+ return __copysign (w[0], x);
return (k == 1) ? __mpcos (orig, 0, true) : __mpsin (orig, 0, true);
}
@@ -833,7 +833,7 @@ bsloww (double x, double dx, double orig, int n)
cor = 1.000000001 * w[1] + __copysign (1.1e-24, w[1]);
if (w[0] == w[0] + cor)
- return (x > 0) ? w[0] : -w[0];
+ return __copysign (w[0], x);
return (n & 1) ? __mpcos (orig, 0, true) : __mpsin (orig, 0, true);
}
@@ -861,7 +861,7 @@ bsloww1 (double x, double dx, double orig, int n)
cor = 1.000000005 * w[1] + __copysign (1.1e-24, w[1]);
if (w[0] == w[0] + cor)
- return (x > 0) ? w[0] : -w[0];
+ return __copysign (w[0], x);
return (n & 1) ? __mpcos (orig, 0, true) : __mpsin (orig, 0, true);
}
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=3459931a1aed87b78a521b0eb931a465c1d101b2
commit 3459931a1aed87b78a521b0eb931a465c1d101b2
Author: Siddhesh Poyarekar <siddhesh@sourceware.org>
Date: Fri Sep 30 05:17:55 2016 +0530
Use copysign instead of ternary conditions for positive constants
This is the first very simple substitution of ternary conditions for
correction adjustments with __copysign for positive constants.
* sysdeps/ieee754/dbl-64/s_sin.c (do_cos_slow): use copysign
instead of ternary condition.
(do_sin_slow): Likewise.
(do_sincos_1): Likewise.
(do_sincos_2): Likewise.
(__cos): Likewise.
(sloww): Likewise.
(sloww1): Likewise.
(sloww2): Likewise.
(bsloww): Likewise.
(bsloww1): Likewise.
(bsloww2): Likewise.
diff --git a/ChangeLog b/ChangeLog
index 6f5ac72..7f51edd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,18 @@
2016-09-29 Siddhesh Poyarekar <siddhesh@sourceware.org>
+ * sysdeps/ieee754/dbl-64/s_sin.c (do_cos_slow): use copysign
+ instead of ternary condition.
+ (do_sin_slow): Likewise.
+ (do_sincos_1): Likewise.
+ (do_sincos_2): Likewise.
+ (__cos): Likewise.
+ (sloww): Likewise.
+ (sloww1): Likewise.
+ (sloww2): Likewise.
+ (bsloww): Likewise.
+ (bsloww1): Likewise.
+ (bsloww2): Likewise.
+
* sysdeps/ieee754/dbl-64/s_sin.c (slow1): Consolidate sign
check from here...
(slow2): ... and here...
diff --git a/sysdeps/ieee754/dbl-64/s_sin.c b/sysdeps/ieee754/dbl-64/s_sin.c
index d60feb4..fef6780 100644
--- a/sysdeps/ieee754/dbl-64/s_sin.c
+++ b/sysdeps/ieee754/dbl-64/s_sin.c
@@ -198,7 +198,7 @@ do_cos_slow (double x, double dx, double eps, double *corp)
cor = cor + ((cs - y) - e1 * x1);
res = y + cor;
cor = (y - res) + cor;
- cor = 1.0005 * cor + ((cor > 0) ? eps : -eps);
+ cor = 1.0005 * cor + __copysign (eps, cor);
*corp = cor;
return res;
}
@@ -258,7 +258,7 @@ do_sin_slow (double x, double dx, double eps, double *corp)
cor = cor + ((sn - y) + c1 * x1);
res = y + cor;
cor = (y - res) + cor;
- cor = 1.0005 * cor + ((cor > 0) ? eps : -eps);
+ cor = 1.0005 * cor + __copysign (eps, cor);
*corp = cor;
return res;
}
@@ -337,13 +337,13 @@ do_sincos_1 (double a, double da, double x, int4 n, int4 k)
{
/* Taylor series. */
res = TAYLOR_SIN (xx, a, da, cor);
- cor = (cor > 0) ? 1.02 * cor + eps : 1.02 * cor - eps;
+ cor = 1.02 * cor + __copysign (eps, cor);
retval = (res == res + cor) ? res : sloww (a, da, x, k);
}
else
{
res = do_sin (a, da, &cor);
- cor = (cor > 0) ? 1.035 * cor + eps : 1.035 * cor - eps;
+ cor = 1.035 * cor + __copysign (eps, cor);
retval = ((res == res + cor) ? ((a > 0) ? res : -res)
: sloww1 (a, da, x, k));
}
@@ -352,7 +352,7 @@ do_sincos_1 (double a, double da, double x, int4 n, int4 k)
case 1:
case 3:
res = do_cos (a, da, &cor);
- cor = (cor > 0) ? 1.025 * cor + eps : 1.025 * cor - eps;
+ cor = 1.025 * cor + __copysign (eps, cor);
retval = ((res == res + cor) ? ((k1 & 2) ? -res : res)
: sloww2 (a, da, x, n));
break;
@@ -411,13 +411,13 @@ do_sincos_2 (double a, double da, double x, int4 n, int4 k)
{
/* Taylor series. */
res = TAYLOR_SIN (xx, a, da, cor);
- cor = (cor > 0) ? 1.02 * cor + eps : 1.02 * cor - eps;
+ cor = 1.02 * cor + __copysign (eps, cor);
retval = (res == res + cor) ? res : bsloww (a, da, x, n);
}
else
{
res = do_sin (a, da, &cor);
- cor = (cor > 0) ? 1.035 * cor + eps : 1.035 * cor - eps;
+ cor = 1.035 * cor + __copysign (eps, cor);
retval = ((res == res + cor) ? ((a > 0) ? res : -res)
: bsloww1 (a, da, x, n));
}
@@ -426,7 +426,7 @@ do_sincos_2 (double a, double da, double x, int4 n, int4 k)
case 1:
case 3:
res = do_cos (a, da, &cor);
- cor = (cor > 0) ? 1.025 * cor + eps : 1.025 * cor - eps;
+ cor = 1.025 * cor + __copysign (eps, cor);
retval = ((res == res + cor) ? ((n & 2) ? -res : res)
: bsloww2 (a, da, x, n));
break;
@@ -573,13 +573,13 @@ __cos (double x)
if (xx < 0.01588)
{
res = TAYLOR_SIN (xx, a, da, cor);
- cor = (cor > 0) ? 1.02 * cor + 1.0e-31 : 1.02 * cor - 1.0e-31;
+ cor = 1.02 * cor + __copysign (1.0e-31, cor);
retval = (res == res + cor) ? res : sloww (a, da, x, 1);
}
else
{
res = do_sin (a, da, &cor);
- cor = (cor > 0) ? 1.035 * cor + 1.0e-31 : 1.035 * cor - 1.0e-31;
+ cor = 1.035 * cor + __copysign (1.0e-31, cor);
retval = ((res == res + cor) ? ((a > 0) ? res : -res)
: sloww1 (a, da, x, 1));
}
@@ -705,7 +705,7 @@ sloww (double x, double dx, double orig, int k)
double eps = fabs (orig) * 3.1e-30;
- cor = 1.0005 * cor + ((cor > 0) ? eps : -eps);
+ cor = 1.0005 * cor + __copysign (eps, cor);
if (res == res + cor)
return res;
@@ -714,7 +714,7 @@ sloww (double x, double dx, double orig, int k)
da = (x > 0) ? dx : -dx;
__dubsin (a, da, w);
eps = fabs (orig) * 1.1e-30;
- cor = 1.000000001 * w[1] + ((w[1] > 0) ? eps : -eps);
+ cor = 1.000000001 * w[1] + __copysign (eps, w[1]);
if (w[0] == w[0] + cor)
return (x > 0) ? w[0] : -w[0];
@@ -740,7 +740,7 @@ sloww (double x, double dx, double orig, int k)
dx = (a > 0) ? da : -da;
__dubsin (x, dx, w);
eps = fabs (orig) * 1.1e-40;
- cor = 1.000000001 * w[1] + ((w[1] > 0) ? eps : -eps);
+ cor = 1.000000001 * w[1] + __copysign (eps, w[1]);
if (w[0] == w[0] + cor)
return (a > 0) ? w[0] : -w[0];
@@ -770,7 +770,7 @@ sloww1 (double x, double dx, double orig, int k)
__dubsin (fabs (x), dx, w);
double eps = 1.1e-30 * fabs (orig);
- cor = 1.000000005 * w[1] + ((w[1] > 0) ? eps : -eps);
+ cor = 1.000000005 * w[1] + __copysign (eps, w[1]);
if (w[0] == w[0] + cor)
return (x > 0) ? w[0] : -w[0];
@@ -800,7 +800,7 @@ sloww2 (double x, double dx, double orig, int n)
__docos (fabs (x), dx, w);
double eps = 1.1e-30 * fabs (orig);
- cor = 1.000000005 * w[1] + ((w[1] > 0) ? eps : -eps);
+ cor = 1.000000005 * w[1] + __copysign (eps, w[1]);
if (w[0] == w[0] + cor)
return (n & 2) ? -w[0] : w[0];
@@ -823,14 +823,14 @@ bsloww (double x, double dx, double orig, int n)
double res, cor, w[2], a, da;
res = TAYLOR_SLOW (x, dx, cor);
- cor = 1.0005 * cor + ((cor > 0) ? 1.1e-24 : -1.1e-24);
+ cor = 1.0005 * cor + __copysign (1.1e-24, cor);
if (res == res + cor)
return res;
a = fabs (x);
da = (x > 0) ? dx : -dx;
__dubsin (a, da, w);
- cor = 1.000000001 * w[1] + ((w[1] > 0) ? 1.1e-24 : -1.1e-24);
+ cor = 1.000000001 * w[1] + __copysign (1.1e-24, w[1]);
if (w[0] == w[0] + cor)
return (x > 0) ? w[0] : -w[0];
@@ -858,7 +858,7 @@ bsloww1 (double x, double dx, double orig, int n)
dx = (x > 0) ? dx : -dx;
__dubsin (fabs (x), dx, w);
- cor = 1.000000005 * w[1] + ((w[1] > 0) ? 1.1e-24 : -1.1e-24);
+ cor = 1.000000005 * w[1] + __copysign (1.1e-24, w[1]);
if (w[0] == w[0] + cor)
return (x > 0) ? w[0] : -w[0];
@@ -886,7 +886,7 @@ bsloww2 (double x, double dx, double orig, int n)
dx = (x > 0) ? dx : -dx;
__docos (fabs (x), dx, w);
- cor = 1.000000005 * w[1] + ((w[1] > 0) ? 1.1e-24 : -1.1e-24);
+ cor = 1.000000005 * w[1] + __copysign (1.1e-24, w[1]);
if (w[0] == w[0] + cor)
return (n & 2) ? -w[0] : w[0];
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=a87b5e95adb97ffd33b2d15cf1a29221e4214500
commit a87b5e95adb97ffd33b2d15cf1a29221e4214500
Author: Siddhesh Poyarekar <siddhesh@sourceware.org>
Date: Fri Sep 30 05:15:55 2016 +0530
consolidate sign checks for slow2
Simplify the code a bit by consolidating sign checks in slow1 and
slow2 into __sin at the higher level.
* sysdeps/ieee754/dbl-64/s_sin.c (slow1): Consolidate sign
check from here...
(slow2): ... and here...
(__sin): ... to here.
diff --git a/ChangeLog b/ChangeLog
index 1f9538c..6f5ac72 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2016-09-29 Siddhesh Poyarekar <siddhesh@sourceware.org>
+
+ * sysdeps/ieee754/dbl-64/s_sin.c (slow1): Consolidate sign
+ check from here...
+ (slow2): ... and here...
+ (__sin): ... to here.
+
2016-09-28 Joseph Myers <joseph@codesourcery.com>
* math/math.h
diff --git a/sysdeps/ieee754/dbl-64/s_sin.c b/sysdeps/ieee754/dbl-64/s_sin.c
index 18f1789..d60feb4 100644
--- a/sysdeps/ieee754/dbl-64/s_sin.c
+++ b/sysdeps/ieee754/dbl-64/s_sin.c
@@ -478,7 +478,8 @@ __sin (double x)
else if (k < 0x3feb6000)
{
res = do_sin (x, 0, &cor);
- retval = (res == res + 1.096 * cor) ? (m > 0 ? res : -res) : slow1 (x);
+ retval = (res == res + 1.096 * cor) ? res : slow1 (x);
+ retval = m > 0 ? retval : -retval;
} /* else if (k < 0x3feb6000) */
/*----------------------- 0.855469 <|x|<2.426265 ----------------------*/
@@ -487,7 +488,8 @@ __sin (double x)
t = hp0 - fabs (x);
res = do_cos (t, hp1, &cor);
- retval = (res == res + 1.020 * cor) ? ((m > 0) ? res : -res) : slow2 (x);
+ retval = (res == res + 1.020 * cor) ? res : slow2 (x);
+ retval = m > 0 ? retval : -retval;
} /* else if (k < 0x400368fd) */
#ifndef IN_SINCOS
@@ -650,13 +652,13 @@ slow1 (double x)
res = do_sin_slow (x, 0, 0, &cor);
if (res == res + cor)
- return (x > 0) ? res : -res;
+ return res;
__dubsin (fabs (x), 0, w);
if (w[0] == w[0] + 1.000000005 * w[1])
- return (x > 0) ? w[0] : -w[0];
+ return w[0];
- return (x > 0) ? __mpsin (x, 0, false) : -__mpsin (-x, 0, false);
+ return __mpsin (fabs (x), 0, false);
}
/**************************************************************************/
@@ -672,16 +674,16 @@ slow2 (double x)
double t = hp0 - fabs (x);
res = do_cos_slow (t, hp1, 0, &cor);
if (res == res + cor)
- return (x > 0) ? res : -res;
+ return res;
y = fabs (x) - hp0;
y1 = y - hp1;
y2 = (y - y1) - hp1;
__docos (y1, y2, w);
if (w[0] == w[0] + 1.000000005 * w[1])
- return (x > 0) ? w[0] : -w[0];
+ return w[0];
- return (x > 0) ? __mpsin (x, 0, false) : -__mpsin (-x, 0, false);
+ return __mpsin (fabs (x), 0, false);
}
/***************************************************************************/
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 31 ++++++++++++++++
sysdeps/ieee754/dbl-64/s_sin.c | 78 ++++++++++++++++++++-------------------
2 files changed, 71 insertions(+), 38 deletions(-)
hooks/post-receive
--
GNU C Library master sources