]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fix sign of input to bsloww1 (BZ #16623)
authorSiddhesh Poyarekar <siddhesh@redhat.com>
Thu, 27 Feb 2014 15:59:16 +0000 (21:29 +0530)
committerMike Frysinger <vapier@gentoo.org>
Sat, 14 Jun 2014 22:44:28 +0000 (18:44 -0400)
In 84ba214c, I removed some redundant sign computations and in the
process, I incorrectly got rid of a temporary variable, thus passing
the absolute value of the input to bsloww1.  This caused #16623.

This fix undoes the incorrect change.

(cherry picked from commit ffe768a90912f9bce43b70a82576b3dc99e3121c)

https://bugs.gentoo.org/509494
https://sourceware.org/bugzilla/show_bug.cgi?id=16623

sysdeps/ieee754/dbl-64/s_sin.c

index 6105e9fbdf1b2c797eb8c85a0eea141233554941..50109b8dd4ed03d59c948bfd9f9b25ffcaf5dac2 100644 (file)
@@ -447,19 +447,21 @@ __sin (double x)
            }
          else
            {
+             double t;
              if (a > 0)
                {
                  m = 1;
+                 t = a;
                  db = da;
                }
              else
                {
                  m = 0;
-                 a = -a;
+                 t = -a;
                  db = -da;
                }
-             u.x = big + a;
-             y = a - (u.x - big);
+             u.x = big + t;
+             y = t - (u.x - big);
              res = do_sin (u, y, db, &cor);
              cor = (cor > 0) ? 1.035 * cor + eps : 1.035 * cor - eps;
              retval = ((res == res + cor) ? ((m) ? res : -res)
@@ -671,19 +673,21 @@ __cos (double x)
            }
          else
            {
+             double t;
              if (a > 0)
                {
                  m = 1;
+                 t = a;
                  db = da;
                }
              else
                {
                  m = 0;
-                 a = -a;
+                 t = -a;
                  db = -da;
                }
-             u.x = big + a;
-             y = a - (u.x - big);
+             u.x = big + t;
+             y = t - (u.x - big);
              res = do_sin (u, y, db, &cor);
              cor = (cor > 0) ? 1.035 * cor + eps : 1.035 * cor - eps;
              retval = ((res == res + cor) ? ((m) ? res : -res)