Kaydet (Commit) 4af36290 authored tarafından Raymond Hettinger's avatar Raymond Hettinger

Improve the rounding and summing examples.

üst cc32a119
...@@ -109,14 +109,24 @@ It's important to realize that this is, in a real sense, an illusion: you're ...@@ -109,14 +109,24 @@ It's important to realize that this is, in a real sense, an illusion: you're
simply rounding the *display* of the true machine value. simply rounding the *display* of the true machine value.
One illusion may beget another. For example, since 0.1 is not exactly 1/10, 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 >>> .1 + .1 + .1 == .3
>>> for i in range(10): False
... sum += 0.1
... Also, since the 0.1 cannot get any closer to the exact value of 1/10 and
>>> sum 0.3 cannot get any closer to the exact value of 3/10, then pre-rounding with
0.9999999999999999 :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 Binary floating-point arithmetic holds many surprises like this. The problem
with "0.1" is explained in precise detail below, in the "Representation Error" with "0.1" is explained in precise detail below, in the "Representation Error"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment