2017-10-09 83 views
0

的結果考慮以下調用numpy.nextafter如何理解numpy.nextafter

>>> from numpy import nextafter 
>>> nextafter(0.1, -1) 
0.099999999999999992 
>>> nextafter(0.1, +1) 
0.10000000000000002 
>>> nextafter(1 , -1) 
0.99999999999999989 
>>> nextafter(1 , +1) 
1.0 
>>> nextafter(10 , -1) 
9.9999999999999982 
>>> nextafter(10 , +1) 
9.9999999999999982 

我希望所有的情況下,第二個參數是正的,返回一個值比第一個參數越大;並且每當第二個參數小於零時,結果都小於第一個參數。

我的期望沒有被行爲表現滿足,特別是:

  1. 函數nextafter(1,+ 1)不改變第一輸入所有,而不是增加了。
  2. nextafter(10,+1)減少了第一個輸入,而不是增加它。

這是錯誤還是功能?與numpy的1.13.1中生成關於Python 3.6.1

回答

2

這些例子您誤解的第二個參數的含義。按照docs,該函數(重點煤礦)X1

返回下一個浮點值向X2,逐元素。

因此,nextafter(1, +1)不會更改任何內容,因爲您正試圖從1.0朝1.0移動。 nextafter(10, +1)減少輸入,因爲這是如何從10.0到1.0。

您可以向+/-無窮去,如果你總是希望增加/減少:

import numpy as np 
nextafter(0.1, -np.inf) # 0.099999999999999992 
nextafter(0.1, +np.inf) # 0.10000000000000002 
nextafter(1 , -np.inf) # 0.99999999999999989 
nextafter(1 , +np.inf) # 1.0000000000000002 
nextafter(10 , -np.inf) # 9.9999999999999982 
nextafter(10 , +np.inf) # 10.000000000000002