From 4f9d04aa8fcc5008995409d524086121e9a840dc Mon Sep 17 00:00:00 2001 From: Adhemerval Zanella Date: Wed, 2 May 2012 15:14:17 +0200 Subject: [PATCH] Fix nexttoward bugs [BZ #2550] [BZ #2570] * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: Use floating-point comparisons to determine direction to adjust input. --- ChangeLog | 7 +++++++ sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c | 12 ++---------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 66deec2..4b36557 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2012-05-02 Adhemerval Zanella + + [BZ #2550] + [BZ #2570] + * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: Use floating-point + comparisons to determine direction to adjust input. + 2012-05-01 Roland McGrath * elf/Makefile ($(objpfx)check-localplt.out): Redirect the test's diff --git a/sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c b/sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c index 9ecfef1..40f0c46 100644 --- a/sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c +++ b/sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c @@ -57,11 +57,7 @@ double __nexttoward(double x, long double y) return x; } if(hx>=0) { /* x > 0 */ - if (hy<0||(ix>>20)>(iy>>52) - || ((ix>>20)==(iy>>52) - && (((((int64_t)hx)<<32)|(lx))>(hy&0x000fffffffffffffLL) - || (((((int64_t)hx)<<32)|(lx))==(hy&0x000fffffffffffffLL) - )))) { /* x > y, x -= ulp */ + if (x > y) { /* x > 0 */ if(lx==0) hx -= 1; lx -= 1; } else { /* x < y, x += ulp */ @@ -69,11 +65,7 @@ double __nexttoward(double x, long double y) if(lx==0) hx += 1; } } else { /* x < 0 */ - if (hy>=0||(ix>>20)>(iy>>52) - || ((ix>>20)==(iy>>52) - && (((((int64_t)hx)<<32)|(lx))>(hy&0x000fffffffffffffLL) - || (((((int64_t)hx)<<32)|(lx))==(hy&0x000fffffffffffffLL) - )))) { /* x < y, x -= ulp */ + if (x < y) { /* x < 0 */ if(lx==0) hx -= 1; lx -= 1; } else { /* x > y, x += ulp */ -- 2.7.4