From: Bruno Haible Date: Sat, 20 Oct 2007 12:34:54 +0000 (+0200) Subject: Don't rely on excess precision: -4 > -3.00000024 - 1 can evaluate to false X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c532b2a8ef48d317a1bc348584c00880ea7c5ba6;p=pspp Don't rely on excess precision: -4 > -3.00000024 - 1 can evaluate to false if the CPU rounds correctly to nearest. --- diff --git a/ChangeLog b/ChangeLog index b0b6a46f2c..d3f95b760c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2007-10-20 Bruno Haible + + * 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 . + 2007-10-20 Bruno Haible * modules/ceil: New file. diff --git a/tests/test-ceilf2.c b/tests/test-ceilf2.c index 7d3c42ff4c..f5e886b66a 100644 --- a/tests/test-ceilf2.c +++ b/tests/test-ceilf2.c @@ -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)); } diff --git a/tests/test-floorf2.c b/tests/test-floorf2.c index 5d87866449..c79091fec7 100644 --- a/tests/test-floorf2.c +++ b/tests/test-floorf2.c @@ -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)); } diff --git a/tests/test-trunc2.c b/tests/test-trunc2.c index 5292ff64ff..f3238ffe2c 100644 --- a/tests/test-trunc2.c +++ b/tests/test-trunc2.c @@ -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))); } diff --git a/tests/test-truncf2.c b/tests/test-truncf2.c index c511cb1ebf..a0b7e6c794 100644 --- a/tests/test-truncf2.c +++ b/tests/test-truncf2.c @@ -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))); }