8

我遇到了一个奇怪的案子。我尝试了 Pyson 在此处发布的三种解决方案中的任何一种:Increment a python floating point value by the minimum possible amount。当我落在这个浮点上时,所有三种解决方案都显示出一种奇怪的行为:1.15898324042702949299155079643242061138153076171875。

假设我有以下代码:

import numpy as np
from __future__ import division

a = 1.15898324042702949299155079643242061138153076171875
b = 0
b = np.nextafter(a,1)
print a, b

由于某种原因,它不是b以最小的可能递增,而是递减。这是为什么?

以下是我从玩弄中得到的一些快速结果:

In [12]: a = 1.15898324042702949299155079643242061138153076171875

In [13]: a
Out[13]: 1.1589832404270295

In [14]: numpy.nextafter(a,1)
Out[14]: 1.1589832404270293

In [15]: numpy.nextafter(a,-1)
Out[15]: 1.1589832404270293
4

1 回答 1

12

从文档(强调我的):

nextafter(x1, x2[, out])

Return the next representable floating-point value after x1 **in the direction
of x2 element-wise**.

第二个参数不是 +/-1 给出的方向,它是指向的值。

In [12]: a = 1.15898324042702949299155079643242061138153076171875

In [13]: a
Out[13]: 1.1589832404270295

In [14]: numpy.nextafter(a, 0)
Out[14]: 1.1589832404270293

In [15]: numpy.nextafter(a, 1)
Out[15]: 1.1589832404270293

In [16]: numpy.nextafter(a, 1.16)
Out[16]: 1.1589832404270297

In [17]: numpy.nextafter(a, 2)
Out[17]: 1.1589832404270297
于 2012-11-09T02:08:14.603 回答