首先,Im不是一种数学色彩,因此大量精度很少被过滤到我的日常工作中。 请说:
采用NumPy生成一个具有从1:
>>> m = numpy.matrix([(1.0 / 1000) for x in xrange(1000)]).T
>>> m
matrix[[ 0.001 ],
[ 0.001 ],
...
[ 0.001 ]])
在64轨Windows with 2.6, 传闻很少奏到1.0. math.fsum()与这一矩阵相吻合,如果我改变矩阵以使用较少的数字,则数字不变。
>>> numpy.sum(m)
1.0000000000000007
>>> math.fsum(m)
1.0
>>> sum(m)
matrix([[ 1.]])
>>> float(sum(m))
1.0000000000000007
On 32-bit Linux (Ubuntu) with Python 2.6, summing always works out to 1.0.
>>> numpy.sum(m)
1.0
>>> math.fsum(m)
1.0
>>> sum(m)
matrix([[ 1.]])
>>> float(sum(m))
1.0000000000000007
在评估矩阵表等于1时(如:化石和lt;总和(m)与lt;+epsilon)时,我可以补充一下我的代码,但我想首先理解,差异的原因是什么是沙捞越的,如果能够以更好的方式正确确定数额。
我的理解是,这笔钱正在处理数量(floats)的机组代表,其方式与重新显示的方式不同,在计算总和时,使用内部沉积。 如何看待我用来计算其数额的3种方法,这并不清楚为什么这些方法重复了所有不同的,或者平台之间的相同。
正确计算矩阵总和的最佳方式是什么?
如果你重新寻找一个更令人感兴趣的矩阵,这一简单变化将可减少矩阵数量:
>>> m = numpy.matrix([(1.0 / 999) for x in xrange(999)]).T
事先得到任何帮助!
Update I think I figured something out. If I correct the value being stored to a 32-bit float the results match the 32-bit Linux sum ing.
>>> m = numpy.matrix([(numpy.float32(1.0) / 1000) for x in xrange(1000)]).T
>>> m
matrix[[ 0.001 ],
[ 0.001 ],
...
[ 0.001 ]])
>>> numpy.sum(m)
1.0
这将确定矩阵机号,以代表32个轨道浮标,而不是我的视窗测试上的64个轨道,并且将正确地加以汇总。 为什么在32个轨道和64个轨道系统中的0.001号浮标不等于机器号? 如果我试图用大量精彩的地方储存极少数人,我会期望他们会有所不同。
没有人对此有任何想法? 我是否应该明确转向32个轨道浮动,或者是否有64个轨道总和的方法? 还是我回过来,增加了一根sil子? 如果我听起来,我会有兴趣发表意见。 感谢!