mirror of
git://sourceware.org/git/glibc.git
synced 2025-03-19 13:40:59 +08:00
Check n instead of k1 to decide on sign of sin/cos result
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.
This commit is contained in:
parent
b8b7e5e644
commit
ba4e688461
@ -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.
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user