diff options
author | Ulrich Drepper <drepper@redhat.com> | 2008-03-24 19:57:55 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2008-03-24 19:57:55 +0000 |
commit | af0498dc955f23c4e2eb28b1658ec2e86b4ab069 (patch) | |
tree | 48b7c50b5d05137ec01dbf6c4abcf95c4b3b70ee /sysdeps/ieee754 | |
parent | 0facd3df4b2faeb6088fa9bf47e94ff6af256750 (diff) | |
download | glibc-af0498dc955f23c4e2eb28b1658ec2e86b4ab069.tar glibc-af0498dc955f23c4e2eb28b1658ec2e86b4ab069.tar.gz glibc-af0498dc955f23c4e2eb28b1658ec2e86b4ab069.tar.bz2 glibc-af0498dc955f23c4e2eb28b1658ec2e86b4ab069.zip |
[BZ #5857]
2008-03-09 Andreas Jaeger <aj@suse.de>
[BZ #5857]
* sysdeps/ieee754/dbl-64/s_rint.c (__rint): Handle j0==18.
* sysdeps/ieee754/dbl-64/s_nearbyint.c (__nearbyint): Likewise.
Patch by Mark Elliott <mark.h.elliott@lmco.com>.
* math/libm-test.inc (nearbyint_test): Add new test cases from #5857.
(rint_test): Likewise.
Diffstat (limited to 'sysdeps/ieee754')
-rw-r--r-- | sysdeps/ieee754/dbl-64/s_nearbyint.c | 9 | ||||
-rw-r--r-- | sysdeps/ieee754/dbl-64/s_rint.c | 11 |
2 files changed, 17 insertions, 3 deletions
diff --git a/sysdeps/ieee754/dbl-64/s_nearbyint.c b/sysdeps/ieee754/dbl-64/s_nearbyint.c index 32f5bf9447..71e14cfb6d 100644 --- a/sysdeps/ieee754/dbl-64/s_nearbyint.c +++ b/sysdeps/ieee754/dbl-64/s_nearbyint.c @@ -71,8 +71,15 @@ TWO52[2]={ if(((i0&i)|i1)==0) return x; /* x is integral */ i>>=1; if(((i0&i)|i1)!=0) { - if(j0==19) i1 = 0x40000000; else + if (j0==19) + i1 = 0x40000000; + else if (j0<18) i0 = (i0&(~i))|((0x20000)>>j0); + else + { + i0 &= ~i; + i1 = 0x80000000; + } } } } else if (j0>51) { diff --git a/sysdeps/ieee754/dbl-64/s_rint.c b/sysdeps/ieee754/dbl-64/s_rint.c index e5f241291c..4e6381efbe 100644 --- a/sysdeps/ieee754/dbl-64/s_rint.c +++ b/sysdeps/ieee754/dbl-64/s_rint.c @@ -67,8 +67,15 @@ TWO52[2]={ if(((i0&i)|i1)==0) return x; /* x is integral */ i>>=1; if(((i0&i)|i1)!=0) { - if(j0==19) i1 = 0x40000000; else - i0 = (i0&(~i))|((0x20000)>>j0); + if (j0==19) + i1 = 0x40000000; + else if (j0<18) + i0 = (i0&(~i))|((0x20000)>>j0); + else + { + i0 &= ~i; + i1 = 0x80000000; + } } } } else if (j0>51) { |