about summary refs log tree commit diff
path: root/sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c')
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c b/sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c
index c050944c0c..30b1540a88 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c
@@ -66,8 +66,11 @@ long double __nextafterl(long double x, long double y)
 	       long double with a 106 bit mantissa, and nextafterl
 	       is insane with variable precision.  So to make
 	       nextafterl sane we assume 106 bit precision.  */
-	    if((hx==0xffefffffffffffffLL)&&(lx==0xfc8ffffffffffffeLL))
-	      return x+x;	/* overflow, return -inf */
+	    if((hx==0xffefffffffffffffLL)&&(lx==0xfc8ffffffffffffeLL)) {
+	      u = x+x;	/* overflow, return -inf */
+	      math_force_eval (u);
+	      return y;
+	    }
 	    if (hx >= 0x7ff0000000000000LL) {
 	      u = 0x1.fffffffffffff7ffffffffffff8p+1023L;
 	      return u;
@@ -93,8 +96,11 @@ long double __nextafterl(long double x, long double y)
 	    }
 	    return x - u;
 	} else {				/* x < y, x += ulp */
-	    if((hx==0x7fefffffffffffffLL)&&(lx==0x7c8ffffffffffffeLL))
-	      return x+x;	/* overflow, return +inf */
+	    if((hx==0x7fefffffffffffffLL)&&(lx==0x7c8ffffffffffffeLL)) {
+	      u = x+x;	/* overflow, return +inf */
+	      math_force_eval (u);
+	      return y;
+	    }
 	    if ((uint64_t) hx >= 0xfff0000000000000ULL) {
 	      u = -0x1.fffffffffffff7ffffffffffff8p+1023L;
 	      return u;