2014-02-27 68 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