From 4f9d04aa8fcc5008995409d524086121e9a840dc Mon Sep 17 00:00:00 2001 From: Adhemerval Zanella Date: Wed, 2 May 2012 15:14:17 +0200 Subject: Fix nexttoward bugs [BZ #2550] [BZ #2570] * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: Use floating-point comparisons to determine direction to adjust input. --- sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) (limited to 'sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c') 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 */ -- cgit v1.1