任何人都可以复制这个吗?
import numpy as np
print np.arccos(1.0)
print np.arccos(1)
for x in np.arange(0.7,1,0.05):
print x
print np.arccos(x)
输出:
0.0
0.0
0.7
0.795398830184
0.75
0.722734247813
0.8
0.643501108793
0.85
0.55481103298
0.9
0.451026811796
0.95
0.317560429292
1.0
nan
请注意,最后一个值np.arccos(1.0)
为nan
。当我在控制台中np.arccos(1.0)
时,0.0
就像我期望的那样。是什么导致了这种行为?
注意,我使用的是Python 2.7.6 Spyder IDE Win7
答案 0 :(得分:10)
这是正常的浮点不准确。将0.05多次添加到0.7并不一定总计为1。
将print x
更改为print repr(x)
,为最后x
输出1.0000000000000002。
>>> np.arccos(1.0000000000000002)
__main__:1: RuntimeWarning: invalid value encountered in arccos
nan