Don't rely on excess precision: -4 > -3.00000024 - 1 can evaluate to false
authorBruno Haible <bruno@clisp.org>
Sat, 20 Oct 2007 12:34:54 +0000 (14:34 +0200)
committerBruno Haible <bruno@clisp.org>
Sat, 20 Oct 2007 12:34:54 +0000 (14:34 +0200)
if the CPU rounds correctly to nearest.

ChangeLog
tests/test-ceilf2.c
tests/test-floorf2.c
tests/test-trunc2.c
tests/test-truncf2.c

index b0b6a46f2c6a8839e4b1fe908f59f1faa0f4db75..d3f95b760c99495dbc409c8535475b6309791c48 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2007-10-20  Bruno Haible  <bruno@clisp.org>
+
+       * tests/test-floorf2.c (correct_result_p): Don't rely on excess
+       precision in the comparison result > x - 1 or similar.
+       * tests/test-ceilf2.c (correct_result_p): Likewise.
+       * tests/test-truncf2.c (correct_result_p): Likewise.
+       * tests/test-trunc2.c (correct_result_p): Likewise.
+       Reported by Ralf Wildenhues <Ralf.Wildenhues@gmx.de>.
+
 2007-10-20  Bruno Haible  <bruno@clisp.org>
 
        * modules/ceil: New file.
index 7d3c42ff4cbfdcae1b2f135f3a2844b6f63d9b35..f5e886b66aea904d0d6e8496d280d4b0432bf6ca 100644 (file)
@@ -112,7 +112,7 @@ correct_result_p (DOUBLE x, DOUBLE result)
 {
   return
     (x > 0 && x <= 1 ? result == L_(1.0) :
-     x + 1 > x ? result >= x && result < x + 1 :
+     x + 1 > x ? result >= x && result <= x + 1 && result - x < 1 :
      equal (result, x));
 }
 
index 5d87866449f30e403584e5fe97f486cac4a6415c..c79091fec74fd25c3feceb0cddbd1f1d0738166b 100644 (file)
@@ -112,7 +112,7 @@ correct_result_p (DOUBLE x, DOUBLE result)
 {
   return
     (x < 0 && x >= -1 ? result == - L_(1.0) :
-     x - 1 < x ? result <= x && result > x - 1 :
+     x - 1 < x ? result <= x && result >= x - 1 && x - result < 1 :
      equal (result, x));
 }
 
index 5292ff64ffa154d94e6d4a38443b294c1fc6c8ab..f3238ffe2ca9efab1af8411d5c6d4a70dcb6338f 100644 (file)
@@ -113,10 +113,10 @@ correct_result_p (DOUBLE x, DOUBLE result)
   return
     (x >= 0
      ? (x < 1 ? result == L_(0.0) :
-       x - 1 < x ? result <= x && result > x - 1 :
+       x - 1 < x ? result <= x && result >= x - 1 && x - result < 1 :
        equal (result, x))
      : (x > -1 ? result == L_(0.0) :
-       x + 1 > x ? result >= x && result < x + 1 :
+       x + 1 > x ? result >= x && result <= x + 1 && result - x < 1 :
        equal (result, x)));
 }
 
index c511cb1ebf85ce44045c8facc0731d37e1123d82..a0b7e6c794d10d604f895e07e8d88e3bd93e5ce6 100644 (file)
@@ -113,10 +113,10 @@ correct_result_p (DOUBLE x, DOUBLE result)
   return
     (x >= 0
      ? (x < 1 ? result == L_(0.0) :
-       x - 1 < x ? result <= x && result > x - 1 :
+       x - 1 < x ? result <= x && result >= x - 1 && x - result < 1 :
        equal (result, x))
      : (x > -1 ? result == L_(0.0) :
-       x + 1 > x ? result >= x && result < x + 1 :
+       x + 1 > x ? result >= x && result <= x + 1 && result - x < 1 :
        equal (result, x)));
 }