3

我正在尝试计算最接近 0 的数字,但到目前为止还没有得到我想要的。

我有一个非常简单的代码;

y = 0.0
x = 0.1
while (y + x > y):
    x = x/2.0
x*2

但我不断得到 0.0 作为输出。我怎样才能解决这个问题

4

3 回答 3

5

我猜你想继续除法,直到 x 变得如此之小,它变为零(以浮点格式)。在循环的最后一次迭代中, x 最终变为零,并且循环条件结果为 false: 0.0(y) + 0.0(x) > 0.0(y)。在最后一行,您尝试通过乘以 2 来检索 x 值。但是 x 已经为零,所以结果也为零。数学上是完全有道理的,但浮点值在那时已经为零。

为了保持最新的非零值,使用第二个变量:

y = 0.0
x = 0.1
smallest_x = x

while (y + x > y):
    smallest_x = x
    x = x/2.0
x*2

或者,您也可以预先检查 x 在再次除法后是否变为零:

y = 0.0
x = 0.1
while (y + x/2.0 > y):   //checking if the next division makes x to zero
    x = x/2.0
x*2

或者采取不同的方法来获得最小的 x:

x = 1.0
while (x/2.0 != 0):
    x = x/2.0
于 2017-01-26T09:24:19.623 回答
3

你可以简单地使用np.nextafter

>>> np.nextafter(0, 1)
4.9406564584124654e-324
于 2017-01-26T09:07:25.900 回答
3

也许您只是在寻找最小的浮点数:

import sys 
print(sys.float_info.min)
于 2017-01-26T09:07:36.063 回答