我阅读帖子is-floating-point-math-broken并获取原因 发生了,但我找不到可以帮助我的解决方案..
如何进行正确的减法?
Python版本2.6.6,Numpy版本1.4.1。
我有两个numpy.ndarray,每个都包含float32值,origin和new。我正在尝试使用numpy.subtract来减去它们,但我得到以下(奇数)结果:
>>> import numpy as
>>> with open('base_R.l_BSREM_S.9.1_001.bin', 'r+') as fid:
origin = np.fromfile(fid, np.float32)
>>> with open('new_R.l_BSREM_S.9.1_001.bin', 'r+') as fid:
new = np.fromfile(fid, np.float32)
>>> diff = np.subtract(origin, new)
>>> origin[5184939]
0.10000000149011611938
>>> new[5184939]
0.00000000023283064365
>>> diff[5184939]
0.10000000149011611938
当我尝试在5184939减去数组时,我得到与diff相同的结果[5184939]
>>> origin[5184939] - new[5184939]
0.10000000149011611938
但是,当我执行以下操作时,我得到了这样的结果:
>>> 0.10000000149011611938 - 0.00000000023283064365
0.10000000125728548
并且这不等于diff [5184939]
如何进行正确的减法? (0.10000000125728548是我需要的那个)
请帮助,并提前致谢
答案 0 :(得分:0)
您可以在问题中添加Python和numpy版本。
差异可能来自np.float32
v np.float64
dtype,默认的Python浮点类型以及显示标准。 numpy
使用与底层Python不同的显示舍入。
减法本身没有区别。
我可以重现0.10000000125728548
值,该值也可能显示为0.1
(小数点后8位)。
我不确定0.10000000149011611938
的来源。看起来好像new[5184939]
同样为0,而不仅仅是像0.00000000023283064365
那样的小事。