2014-02-27 47 views
3

任何人都可以复制此?为什么np.arccos(1.0)给np.arange喂食nan?

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

是的 - 我可以在2.7.6上复制此行为,但我不知道为什么! – rabs

回答

9

这是正常的浮点误差。为0.7添加0.05多次并不一定总是等于1。

print x更改为print repr(x)输出1.0000000000000002为最后的x

>>> np.arccos(1.0000000000000002) 
__main__:1: RuntimeWarning: invalid value encountered in arccos 
nan