On Fri, Sep 3, 2021 at 8:15 AM Dennis Lee Bieber <wlfr...@ix.netcom.com> wrote: > > On Fri, 3 Sep 2021 04:43:02 +1000, Chris Angelico <ros...@gmail.com> > declaimed the following: > > > > >The naive summation algorithm used by sum() is compatible with a > >variety of different data types - even lists, although it's documented > >as being intended for numbers - but if you know for sure that you're > >working with floats, there's a more accurate algorithm available to > >you. > > > >>>> math.fsum([7.23, 8.41, 6.15, 2.31, 7.73, 7.77]) > >39.6 > >>>> math.fsum([8.41, 6.15, 2.31, 7.73, 7.77, 7.23]) > >39.6 > > > >It seeks to minimize loss to repeated rounding and is, I believe, > >independent of data order. > > > > Most likely it sorts the data so the smallest values get summed first, > and works its way up to the larger values. That way it minimizes the losses > that occur when denormalizing a value (to set the exponent equal to that of > the next larger value). >
I'm not sure, but that sounds familiar. It doesn't really matter though - the docs just say that it is an "accurate floating point sum", so the precise algorithm is an implementation detail. ChrisA -- https://mail.python.org/mailman/listinfo/python-list