Please help - get average
Cliff Wells
clifford.wells at comcast.net
Wed Oct 27 04:21:54 EDT 2004
On Wed, 2004-10-27 at 09:07 +0100, Robin Becker wrote:
> Cliff Wells wrote:
> ......
> >
> > total = 0.0
> > count = 0
> > number = None
> >
> > while number not in ('q', 'Q'):
> > number = raw_input("Enter a number (or Q to quit): ")
> > try:
> > number = float(number)
> > except ValueError:
> > continue
> > total += number
> > count += 1
> >
> > print "The average is:", total / count
> >
> ...... interestingly the standard algorithms for means/deviations are
> numerically poor. As an example
>
> >>> (1.e30+1-1.0e30)/3
> 0.0
>
> Where we have total loss of information in one of the terms.
>
>
> There are better algorithms involving recursion,
>
> eg
>
> mu[n] = (data[n]+(n-1)*mu[n-1])/n
>
> The error in the existing estimate, mu[n-1], gets multiplied by the
> number (n-1)/n which is less than one (ie the errors are damped).
>
> However, in the case of widely differing magnitudes I think you need to
> accumulate the sums specially.
Luckily I'm a programmer not a mathematician, so most days I can happily
continue averaging things the way I did in grade school. And if
something goes wrong, well I can always count on there being only 32
bits in an integer and just catch the error there <wink>.
--
Cliff Wells <clifford.wells at comcast.net>
More information about the Python-list
mailing list