Lists: Converting Double to Single

Steven D'Aprano steve at REMOVE.THIS.cybersource.com.au
Tue Feb 27 09:58:38 EST 2007


On Tue, 27 Feb 2007 10:06:29 +0000, Duncan Booth wrote:

> Adding up a long list of values 
> and then dividing by the number of values is the classic computer 
> science example of how to get an inaccurate answer from a floating point 
> calculation.

I'm not entirely ignorant when it comes to computational mathematics, but
I must admit this is a new one to me.

If the values vary greatly in magnitude, you probably want to add them
from smallest to biggest; other than that, how else can you calculate the
mean?

The only alternative I thought of was to divide each value by the count
before summing, but that would be horribly inaccurate.

Or would it?

>>> def mean1(*args):
...     return sum(args)/len(args)
...
>>> def mean2(*args):
...     n = len(args)
...     return sum([x/n for x in args])
...
>>> L = range(25, 597)  # 572 values
>>> L = [x/3.3 for x in L]
>>>
>>> mean1(*L)
94.090909090909108
>>> mean2(*L)
94.090909090909108

The first calculation has 571 additions and one division; the second
calculation has 571 additions and 572 divisions, but they both give the
same result to 15 decimal places.



-- 
Steven.




More information about the Python-list mailing list