aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@gmail.com>2011-10-29 14:08:56 -0400
committerUlrich Drepper <drepper@gmail.com>2011-10-29 14:08:56 -0400
commitcb95113e30aead7b97cd806278c0ff055ba721b6 (patch)
treefde7e269b8ace65f635aade43c31b355c4dd52aa
parent09e18697732f90357db0b3241e563a4db8ebfb03 (diff)
downloadglibc-cb95113e30aead7b97cd806278c0ff055ba721b6.zip
glibc-cb95113e30aead7b97cd806278c0ff055ba721b6.tar.gz
glibc-cb95113e30aead7b97cd806278c0ff055ba721b6.tar.bz2
Fix accuracy problem in generic sin
-rw-r--r--ChangeLog7
-rw-r--r--NEWS8
-rw-r--r--math/libm-test.inc1
-rw-r--r--sysdeps/ieee754/dbl-64/s_sin.c2
4 files changed, 13 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 6cb54e6..4c5ff75 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2011-07-03 Andreas Jaeger <aj@suse.de>
+
+ [BZ #10709]
+ * sysdeps/ieee754/dbl-64/s_sin.c (__sin): Fix incorrect rounding
+ of sin. Patch suggested by Paul Zimmermann <zimmerma+gcc@loria.fr>.
+ * math/libm-test.inc (sin_test): Add test case.
+
2011-10-29 Ulrich Drepper <drepper@gmail.com>
[BZ #13337]
diff --git a/NEWS b/NEWS
index e4b9f44..73ab2b9 100644
--- a/NEWS
+++ b/NEWS
@@ -9,10 +9,10 @@ Version 2.15
* The following bugs are resolved with this release:
- 6779, 6783, 9696, 11589, 12403, 12847, 12868, 12852, 12874, 12885, 12892,
- 12907, 12922, 12935, 13007, 13021, 13067, 13068, 13090, 13092, 13114,
- 13118, 13123, 13134, 13138, 13150, 13179, 13192, 13268, 13291, 13335,
- 13337, 13344
+ 6779, 6783, 9696, 10709, 11589, 12403, 12847, 12868, 12852, 12874, 12885,
+ 12892, 12907, 12922, 12935, 13007, 13021, 13067, 13068, 13090, 13092,
+ 13114, 13118, 13123, 13134, 13138, 13150, 13179, 13192, 13268, 13291,
+ 13335, 13337, 13344
* New program pldd to list loaded object of a process
Implemented by Ulrich Drepper.
diff --git a/math/libm-test.inc b/math/libm-test.inc
index 96da7cd..a451174 100644
--- a/math/libm-test.inc
+++ b/math/libm-test.inc
@@ -5642,6 +5642,7 @@ sin_test (void)
#ifdef TEST_DOUBLE
TEST_f_f (sin, 0.80190127184058835, 0.71867942238767868);
+ TEST_f_f (sin, 2.522464e-1, 2.4957989804940911e-1);
#endif
END (sin);
diff --git a/sysdeps/ieee754/dbl-64/s_sin.c b/sysdeps/ieee754/dbl-64/s_sin.c
index 6f19f15..5183e55 100644
--- a/sysdeps/ieee754/dbl-64/s_sin.c
+++ b/sysdeps/ieee754/dbl-64/s_sin.c
@@ -138,7 +138,7 @@ __sin(double x){
cor=(ssn+s*ccs-sn*c)+cs*s;
res=sn+cor;
cor=(sn-res)+cor;
- return (res==res+1.025*cor)? res : slow1(x);
+ return (res==res+1.096*cor)? res : slow1(x);
} /* else if (k < 0x3feb6000) */
/*----------------------- 0.855469 <|x|<2.426265 ----------------------*/