为什么np.arange(5, 60, 0.1)[150]
会产生19.999999999999947
。但是np.arange(5, 60, 0.5)[30]
会产生20.0
?
为什么会这样?
答案 0 :(得分:1)
那是因为浮点数(大部分时间)不能代表您输入的确切值。请尝试print("%.25f" % np.float64(0.1))
,它返回0.1000000000000000055511151
并不完全0.1
。
Numpy已经为几乎相等(浮点)比较提供了一个很好的解决方法:np.testing.assert_almost_equal
因此您可以使用np.testing.assert_almost_equal(20,np.arange(5, 60, 0.1)[150])
进行测试。
您的第二个示例提供实际值的原因是因为0.5
可以表示为精确浮点2**(-1) = 0.5
,因此使用此值的乘法不会受到该浮点问题的影响。