计算最接近的数字numpy

时间:2017-01-26 09:03:30

标签: python numpy epsilon

我试图将最接近的数字计算为0但到目前为止无法得到我想要的数据。

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

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

但我一直得到0.0作为输出。我该如何解决这个问题?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

您只需使用np.nextafter

>>> np.nextafter(0, 1)
4.9406564584124654e-324

答案 2 :(得分:3)

也许您只是搜索最小的浮点数:

import sys 
print(sys.float_info.min)
相关问题