0
为什么np.arange(5, 60, 0.1)[150]
产量19.999999999999947
。但np.arange(5, 60, 0.5)[30]
产生20.0
?numpy.arange浮点错误
为什么会发生这种情况?
为什么np.arange(5, 60, 0.1)[150]
产量19.999999999999947
。但np.arange(5, 60, 0.5)[30]
产生20.0
?numpy.arange浮点错误
为什么会发生这种情况?
这是因为漂浮物(大部分时间)不能表示您输入的确切值。请尝试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
,因此与该值的乘法不会遇到浮点问题。
这可能帮助:http://stackoverflow.com/questions/21895756/why-are-floating-point-numbers-inaccurate在你的情况,0.5有一个确切的二进制表示的浮点数,但0.1没有。 – xnx