diff options
author | Siddhesh Poyarekar <siddhesh@sourceware.org> | 2016-09-30 05:15:55 +0530 |
---|---|---|
committer | Siddhesh Poyarekar <siddhesh@sourceware.org> | 2016-09-30 05:15:56 +0530 |
commit | a87b5e95adb97ffd33b2d15cf1a29221e4214500 (patch) | |
tree | 9be08071b4afbcbc636ea2aefbe3194b64f4785c /sysdeps/ieee754/dbl-64/s_sin.c | |
parent | b59ad2db99df74326ae28926299469eecce6f468 (diff) | |
download | glibc-a87b5e95adb97ffd33b2d15cf1a29221e4214500.tar.gz glibc-a87b5e95adb97ffd33b2d15cf1a29221e4214500.tar.xz glibc-a87b5e95adb97ffd33b2d15cf1a29221e4214500.zip |
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.
Diffstat (limited to 'sysdeps/ieee754/dbl-64/s_sin.c')
-rw-r--r-- | sysdeps/ieee754/dbl-64/s_sin.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/sysdeps/ieee754/dbl-64/s_sin.c b/sysdeps/ieee754/dbl-64/s_sin.c index 18f1789bba..d60feb405f 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); } /***************************************************************************/ |