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.