]> granicus.if.org Git - python/commitdiff
Skip math.sum tests on non IEEE 754 platforms, and on IEEE 754 platforms
authorMark Dickinson <dickinsm@gmail.com>
Fri, 23 May 2008 12:07:36 +0000 (12:07 +0000)
committerMark Dickinson <dickinsm@gmail.com>
Fri, 23 May 2008 12:07:36 +0000 (12:07 +0000)
that exhibit the problem described in issue #2937.

Lib/test/test_math.py

index cc30081dbf73d3e78008db30096c5389af55151d..095e65744abc4fe7e150ed6fb3a9e91b13ea9083 100644 (file)
@@ -631,6 +631,22 @@ class MathTests(unittest.TestCase):
         self.assert_(math.isnan(math.sqrt(NAN)))
 
     def testSum(self):
+        # math.sum relies on exact rounding for correct operation.
+        # There's a known problem with IA32 floating-point that causes
+        # inexact rounding in some situations, and will cause the
+        # math.sum tests below to fail; see issue #2937.  On non IEEE
+        # 754 platforms, and on IEEE 754 platforms that exhibit the
+        # problem described in issue #2937, we simply skip the whole
+        # test.
+
+        if not float.__getformat__("double").startswith("IEEE"):
+            return
+
+        # on IEEE 754 compliant machines, both of the expressions
+        # below should round to 10000000000000002.0.
+        if 1e16+2.999 != 1e16+2.9999:
+            return
+
         # Python version of math.sum algorithm, for comparison
         def msum(iterable):
             """Full precision sum of values in iterable.  Returns the value of