summaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2008-03-24 19:57:55 +0000
committerUlrich Drepper <drepper@redhat.com>2008-03-24 19:57:55 +0000
commitaf0498dc955f23c4e2eb28b1658ec2e86b4ab069 (patch)
tree48b7c50b5d05137ec01dbf6c4abcf95c4b3b70ee /sysdeps
parent0facd3df4b2faeb6088fa9bf47e94ff6af256750 (diff)
[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')
-rw-r--r--sysdeps/ieee754/dbl-64/s_nearbyint.c9
-rw-r--r--sysdeps/ieee754/dbl-64/s_rint.c11
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) {