2016-02-12 85 views
0

为什么np.arange(5, 60, 0.1)[150]产量19.999999999999947。但np.arange(5, 60, 0.5)[30]产生20.0numpy.arange浮点错误

为什么会发生这种情况?

+0

这可能帮助:http://stackoverflow.com/questions/21895756/why-are-floating-point-numbers-inaccurate在你的情况,0.5有一个确切的二进制表示的浮点数,但0.1没有。 – xnx

回答

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,因此与该值的乘法不会遇到浮点问题。