Subject: | [patch] tests about double precision numbers fail with Perl 5.12.0 |
Hi,
When run under Perl 5.12.0 (built with -Duselongdoubles) on amd64 the
following tests fail:
# Failed test 'Negative doubles'
# at t/01-types-from-js.t line 24.
# got: '-1.10000000000000009'
# expected: '-1.1'
# Failed test 'Positive doubles'
# at t/01-types-from-js.t line 26.
# got: '1.10000000000000009'
# expected: '1.1'
# Looks like you failed 2 tests of 20.
t/01-types-from-js.t ..............
This was reported as Debian bug http://bugs.debian.org/578548
The attached patch addresses this by replacing the equality tests with
tests if the difference between the expected and the real result is very
small.
It would be nice if the patch is included in a future release.
Thanks.
Subject: | fix-longdouble-comparison.patch |
Description: Replace equality test between doubles with "<epsilon" test
Thing is, doubles are not exact and errors are possible in the least
significant digit.
This patch replaces the equality tests with a test if the difference is smaller than a very small number
Bug-Debian: 578548
Forwarded: no
Author: Damyan Ivanov <dmn@debian.org>
Last-Update: 2010-04-22
--- a/t/01-types-from-js.t
+++ b/t/01-types-from-js.t
@@ -21,9 +21,9 @@ is($cx1->eval("1;"), 1, "Positive intege
is($cx1->eval("5000000000;"), 5_000_000_000, "Really big integers");
# Doubles
-is($cx1->eval("-1.1;"), -1.1, "Negative doubles");
+ok(abs($cx1->eval("-1.1;") - -1.1) < 1e-14, "Negative doubles");
is($cx1->eval("0.0;"), 0.0, "Zero doubles");
-is($cx1->eval("1.1;"), 1.1, "Positive doubles");
+ok(abs($cx1->eval("1.1;")- 1.1) < 1e-14, "Positive doubles");
is($cx1->eval("5000000000.5;"), 5000000000.5, "Really big doubles");
# Strings