Is numpy.sum implemented in such a way that numerical errors are avoided? Is numpy.sum implemented in such a way that numerical errors are avoided? numpy numpy

Is numpy.sum implemented in such a way that numerical errors are avoided?


Searching on numpy kahan turned up a closed bug/issue

https://github.com/numpy/numpy/issues/2448 Numerical-stable sum (similar to math.fsum)

I haven't read it in detail. Note the reference to math.fsum

fsum(iterable)Return an accurate floating point sum of values in the iterable.Assumes IEEE-754 floating point arithmetic.(from the Python math docs)Return an accurate floating point sum of values in the iterable. Avoids loss of precision by tracking multiple intermediate partial sums

And a SO question, with some discussion, but no real answer:

Is there any documentation of numpy numerical stability?

A simple comparison:

In [320]: x=np.ones(100000)/100000In [321]: sum(x)-1Out[321]: -1.9162449405030202e-12In [322]: np.sum(x)-1Out[322]: 1.3322676295501878e-15In [323]: math.fsum(x)-1Out[323]: 0.0

respective times are 72 ms, 304 µs, 23.8 ms

np.sum is clearly fastest; but fsum is better than sum, probably because of its sepecialized C implementation.