# HG changeset patch # User Bruno Haible # Date 1192883694 -7200 # Node ID 4e720cd881400660f87f86f31bea75a88739fa7f # Parent 9dcad82b43bb48df2b0e8914cc7dc427f05780b7 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 --- 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 --- a/tests/test-ceilf2.c +++ b/tests/test-ceilf2.c @@ -112,7 +112,7 @@ { 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 --- a/tests/test-floorf2.c +++ b/tests/test-floorf2.c @@ -112,7 +112,7 @@ { 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 --- a/tests/test-trunc2.c +++ b/tests/test-trunc2.c @@ -113,10 +113,10 @@ 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 --- a/tests/test-truncf2.c +++ b/tests/test-truncf2.c @@ -113,10 +113,10 @@ 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))); }