2017-10-09 130 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