[Python-checkins] r71991 - python/branches/py3k/Doc/tutorial/floatingpoint.rst

raymond.hettinger python-checkins at python.org
Sun Apr 26 23:37:46 CEST 2009


Author: raymond.hettinger
Date: Sun Apr 26 23:37:46 2009
New Revision: 71991

Log:
Improve the rounding and summing examples.

Modified:
   python/branches/py3k/Doc/tutorial/floatingpoint.rst

Modified: python/branches/py3k/Doc/tutorial/floatingpoint.rst
==============================================================================
--- python/branches/py3k/Doc/tutorial/floatingpoint.rst	(original)
+++ python/branches/py3k/Doc/tutorial/floatingpoint.rst	Sun Apr 26 23:37:46 2009
@@ -109,14 +109,24 @@
 simply rounding the *display* of the true machine value.
 
 One illusion may beget another.  For example, since 0.1 is not exactly 1/10,
-summing ten values of 0.1 may not yield exactly 1.0, either::
+summing three values of 0.1 may not yield exactly 0.3, either::
 
-   >>> sum = 0.0
-   >>> for i in range(10):
-   ...     sum += 0.1
-   ...
-   >>> sum
-   0.9999999999999999
+   >>> .1 + .1 + .1 == .3
+   False
+
+Also, since the 0.1 cannot get any closer to the exact value of 1/10 and
+0.3 cannot get any closer to the exact value of 3/10, then pre-rounding with
+:func:`round` function cannot help::
+
+   >>> round(.1, 1) + round(.1, 1) + round(.1, 1) == round(.3, 1)
+   False
+
+Though the numbers cannot be made closer to their intended exact values,
+the :func:`round` function can be useful for post-rounding so that results
+have inexact values that are comparable to one another::
+
+    >>> round(.1 + .1 + .1, 1) == round(.3, 1)
+    True
 
 Binary floating-point arithmetic holds many surprises like this.  The problem
 with "0.1" is explained in precise detail below, in the "Representation Error"


More information about the Python-checkins mailing list