Fix nexttoward bugs
authorAdhemerval Zanella <azanella@linux.vnet.ibm.com>
Wed, 2 May 2012 13:14:17 +0000 (15:14 +0200)
committerAndreas Jaeger <aj@suse.de>
Wed, 2 May 2012 13:14:17 +0000 (15:14 +0200)
        [BZ #2550]
        [BZ #2570]
        * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: Use floating-point
        comparisons to determine direction to adjust input.

ChangeLog
sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c

index 66deec2..4b36557 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2012-05-02  Adhemerval Zanella  <azanella@linux.vnet.ibm.com>
+
+        [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  <roland@hack.frob.com>
 
        * elf/Makefile ($(objpfx)check-localplt.out): Redirect the test's
index 9ecfef1..40f0c46 100644 (file)
@@ -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 */