On Sat, 16 Jul 2016 06:24 am, Paul Rubin wrote: > Steven D'Aprano <st...@pearwood.info> writes: >> But this can give some protection against overflow of intermediate >> values. > > Might be simplest to just add the logarithms. Look up Kahan summation > for how to do that while minimizing loss of precision.
Simplest, but least accurate, even with Kahan summation or equivalent. Even a naive implementation of product does better: py> from operator import mul py> reduce(mul, [1.0, 2.0, 3.0, 4.0, 5.0]) 120.0 py> math.exp(math.fsum(math.log(x) for x in [1.0, 2.0, 3.0, 4.0, 5.0])) 119.99999999999997 That second answer might be good enough for getting an astronaut to the Moon, but it's not good enough to get them back again *wink* -- Steven “Cheer up,” they said, “things could be worse.” So I cheered up, and sure enough, things got worse. -- https://mail.python.org/mailman/listinfo/python-list