如何理解numpy.nextafter的结果

时间:2017-10-09 11:16:40

标签: python numpy floating-point

考虑以下对myobj.update_attr_from(something_different)

的调用
numpy.nextafter

我希望第二个参数为正的所有情况都返回一个大于第一个参数的值;并且只要第二个参数小于零,结果就小于第一个参数。

我对展览行为的期望并不满足,特别是:

  1. nextafter(1,+ 1)根本不会改变第一个输入,而不是增加它。
  2. nextafter(10,+ 1)减少第一个输入,而不是增加它。
  3. 这是一个错误还是一个功能?

    这些示例是使用Python 3.6.1上的Numpy 1.13.1生成的。

1 个答案:

答案 0 :(得分:4)

你误解了第二个参数的含义。根据{{​​3}},函数确实(强调我的)

  

按元素方式将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