]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Check n instead of k1 to decide on sign of sin/cos result
authorSiddhesh Poyarekar <siddhesh@sourceware.org>
Wed, 5 Oct 2016 19:04:26 +0000 (00:34 +0530)
committerSiddhesh Poyarekar <siddhesh@sourceware.org>
Wed, 5 Oct 2016 19:04:26 +0000 (00:34 +0530)
For k1 in 1 and 3, n can only have values of 0 and 2, so checking k1 &
2 is equivalent to checking n & 2.  We prefer the latter so that we
don't use k1 for anything other than selecting the quadrant in
do_sincos_1, thus dropping it completely.

The previous logic was:

    "Compute sine for the value and based on the new rotated quadrant
     (k1) negate the value if we're in the fourth quadrant."

With this change, the logic now is:

    "Compute sine for the value and negate it if we were either (1) in
     the fourth quadrant or (2) we actually wanted the cosine and were
     in the third quadrant."

* sysdeps/ieee754/dbl-64/s_sin.c (do_sincos_1): Check N
instead of K1.

ChangeLog
sysdeps/ieee754/dbl-64/s_sin.c

index ff38c6eb14c694e1ea951b18e85f58ab17b17ff9..2495a2eb4c38db1e84e60ab3be4fd85eabd3aec8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2016-10-05  Siddhesh Poyarekar  <siddhesh@sourceware.org>
 
+       * sysdeps/ieee754/dbl-64/s_sin.c (do_sincos_1): Check N
+       instead of K1.
+
        * sysdeps/ieee754/dbl-64/s_sin.c (do_sincos_1): Rename K to
        SHIFT_QUADRANT and make it bool.
        (do_sincos_2): Likewise.
index 76cf99619a1612efa039781be8eac7a65b26b450..67bdebfd6c577ebbc6e9021db5da39a9f38b16e5 100644 (file)
@@ -353,7 +353,7 @@ do_sincos_1 (double a, double da, double x, int4 n, bool shift_quadrant)
     case 3:
       res = do_cos (a, da, &cor);
       cor = 1.025 * cor + __copysign (eps, cor);
-      retval = ((res == res + cor) ? ((k1 & 2) ? -res : res)
+      retval = ((res == res + cor) ? ((n & 2) ? -res : res)
                : sloww2 (a, da, x, n));
       break;
     }