Alexander Belopolsky <[email protected]> added the comment:
Actually, my first attempt to fix the test was faulty. The correct logic seems
to be
+def is_negative_zero(x):
+ return x == 0 and math.copysign(1, x) < 0
+
+def almost_equal(value, expected):
+ if math.isfinite(expected) and math.isfinite(value):
+ if is_negative_zero(expected):
+ return is_negative_zero(value)
+ if is_negative_zero(value):
+ return is_negative_zero(expected)
+ return abs(value-expected) <= eps
+ if math.isnan(expected):
+ return math.isnan(value)
+ return value == expected
+
class MathTests(unittest.TestCase):
+
+ def test_xxx(self):
+ self.assertTrue(is_negative_zero(-0.0))
+ self.assertFalse(almost_equal(0.0, -0.0))
def ftest(self, name, value, expected):
- if abs(value-expected) > eps:
+ if not almost_equal(value, expected):
Now, the attached patch has two failures:
AssertionError: fmod(-10,1) returned -0.0, expected 0
and
AssertionError: sqrt0002:sqrt(-0.0) returned -0.0, expected 0.0
The first seems to be a typo in the test, but I would not expect sqrt(-0.0) to
return -0.0. Does anyone know what the relevant standard says?
----------
Added file: http://bugs.python.org/file21831/unorderable-nans.diff
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue11949>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com