Feature suggestion: sum() ought to use a compensated summation algorithm

Szabolcs szhorvat at gmail.com
Mon May 5 10:08:02 EDT 2008


On May 5, 12:24 pm, Duncan Booth <duncan.bo... at invalid.invalid> wrote:
> Szabolcs <szhor... at gmail.com> wrote:
> > On May 5, 9:37 am, Szabolcs Horvát <szhor... at gmail.com> wrote:
> >> Gabriel Genellina wrote:
>
> >> > Python doesn't require __add__ to be associative, so this should
> >> > not be
> > used as a general sum replacement.
>
> >> It does not _require_ this, but using an __add__ that is not
> >> commutative and associative, or has side effects, would qualify as a
> >> serious misuse, anyway.
>
> > Sorry, I meant associative only, not commutative.
>
> Unfortunately an __add__ which is not associative is actually perfectly
> reasonable.

Well, 'reasonable' is a subjective notion in this case :-)  I have
never seen a non-associative use of the plus sign in maths, so I would
tend to take associativity for granted when seeing a + b + c in code,
therefore I would avoid such uses.  (Multiplication signs are a
different story.)  Of course others may feel differently about this,
and technically there's nothing in the way of using a non-associative
__add__! :)

> For example you could have a Tree class where adding two trees
> returns a new tree so (a+b)+c gives you:
>
>     .
>    / \
>    .  c
>   / \
>   a  b
>
> but a+(b+c) gives:
>
>     .
>    / \
>    a  .
>      / \
>      b  c




More information about the Python-list mailing list