Add an example for math.fsum() and elaborate on the accurary note.

This commit is contained in:
Raymond Hettinger 2009-02-19 05:53:22 +00:00
parent 5894c2b548
commit 7f48c1055e

View file

@ -87,14 +87,18 @@ Number-theoretic and representation functions
.. function:: fsum(iterable) .. function:: fsum(iterable)
Return an accurate floating point sum of values in the iterable. Avoids Return an accurate floating point sum of values in the iterable. Avoids
loss of precision by tracking multiple intermediate partial sums. The loss of precision by tracking multiple intermediate partial sums::
algorithm's accuracy depends on IEEE-754 arithmetic guarantees and the
typical case where the rounding mode is half-even.
.. note:: >>> sum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])
0.99999999999999989
>>> fsum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])
1.0
The accuracy of fsum() may be impaired on builds that use The algorithm's accuracy depends on IEEE-754 arithmetic guarantees and the
extended precision addition and then double-round the results. typical case where the rounding mode is half-even. On some non-Windows
builds, the underlying C library uses extended precision addition and may
occasionally double-round an intermediate sum causing it to be off in its
least significant bit.
.. versionadded:: 2.6 .. versionadded:: 2.6