diff options
author | Paul Pluzhnikov <ppluzhnikov@google.com> | 2011-09-08 23:37:32 -0400 |
---|---|---|
committer | Ulrich Drepper <drepper@gmail.com> | 2011-09-08 23:37:32 -0400 |
commit | 7f5517aa5269af6cac791ca74111f817320b73f2 (patch) | |
tree | 0fd1727af3deb3b0205a8ba2371889a610fee6ed | |
parent | 5f69cd2f94fc7bf0a468bf0a5b53b32f2b7c468c (diff) | |
download | glibc-7f5517aa5269af6cac791ca74111f817320b73f2.tar glibc-7f5517aa5269af6cac791ca74111f817320b73f2.tar.gz glibc-7f5517aa5269af6cac791ca74111f817320b73f2.tar.bz2 glibc-7f5517aa5269af6cac791ca74111f817320b73f2.zip |
Fix lround() loses precision
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | math/libm-test.inc | 1 | ||||
-rw-r--r-- | sysdeps/ieee754/dbl-64/s_lround.c | 2 |
3 files changed, 8 insertions, 1 deletions
@@ -1,3 +1,9 @@ +2011-08-18 Paul Pluzhnikov <ppluzhnikov@google.com> + Ian Lance Taylor <iant@google.com> + + * math/libm-test.inc (lround_test): New testcase. + * sysdeps/ieee754/dbl-64/s_lround.c (__lround): Don't lose precision. + 2011-09-08 Ulrich Drepper <drepper@gmail.com> * Makefile: Remove support for automatic cvs check-ins. diff --git a/math/libm-test.inc b/math/libm-test.inc index c6ed7a39fe..301d4a8f66 100644 --- a/math/libm-test.inc +++ b/math/libm-test.inc @@ -4386,6 +4386,7 @@ lround_test (void) TEST_f_l (lround, 1073741824.01, 1073741824); # if LONG_MAX > 281474976710656 TEST_f_l (lround, 281474976710656.025, 281474976710656); + TEST_f_l (llround, -3.65309740835E17, -365309740835000000); # endif TEST_f_l (lround, 2097152.5, 2097153); TEST_f_l (lround, -2097152.5, -2097153); diff --git a/sysdeps/ieee754/dbl-64/s_lround.c b/sysdeps/ieee754/dbl-64/s_lround.c index 4e1302ad4d..a849997a15 100644 --- a/sysdeps/ieee754/dbl-64/s_lround.c +++ b/sysdeps/ieee754/dbl-64/s_lround.c @@ -51,7 +51,7 @@ __lround (double x) else if (j0 < (int32_t) (8 * sizeof (long int)) - 1) { if (j0 >= 52) - result = ((long int) i0 << (j0 - 20)) | (i1 << (j0 - 52)); + result = ((long int) i0 << (j0 - 20)) | ((long int) i1 << (j0 - 52)); else { u_int32_t j = i1 + (0x80000000 >> (j0 - 20)); |