2016-02-13 42 views
1

我曾預計numpy的arange(start,end)產生範圍[開始,結束]的值。下面的例子表明,這並不總是正確的(最終值大於end大):numpy`arange`超過了最終值?

import numpy as np 
    start=2e9 
    end=start+321 
    step=0.066833171999 
    x=np.arange(start,end,step=step) 
    print x[-1]>end # Prints "True" 
    print x[-1]-end # Prints 0.00013661384582519531 

的錯誤似乎過於龐大由機器精度造成的(但也許我錯誤地想着它)。這是怎麼回事?

PS:我使用numpy的版本1.10.1

+0

'x'正在使用什麼'dtype'? – Blckknght

+0

@Blckknght x.dtype是dtype('float64') –

+0

@hpaulj'x.shape [0] * step = 321.066558283196' –

回答

2

arange文檔:

間隔均勻值的數組。

對於浮點參數,結果的長度爲ceil((stop - start)/step)。由於浮點溢出,此規則可能導致out的最後一個元素大於stop。

您的step次數組的長度大於321。linspace更關注終點。