numpy.arange浮点错误

时间:2016-02-12 12:05:49

标签: python python-2.7 numpy floating-point

为什么np.arange(5, 60, 0.1)[150]会产生19.999999999999947。但是np.arange(5, 60, 0.5)[30]会产生20.0

为什么会这样?

1 个答案:

答案 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,因此使用此值的乘法不会受到该浮点问题的影响。