2017-01-26 81 views
3

我試圖計算最接近的數字0,但不能得到我想要的東西。計算最接近的數字numpy

我有一個相當簡單的代碼;

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

但我一直得到0.0作爲輸出。我怎樣才能解決這個

回答

5

我猜你要不斷分裂,直到X變得如此小它變爲零(以浮點格式)。在循環的最後一次迭代中,x最終變爲零,並且循環條件變爲假: 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 divinding一次後變爲零:

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 
3

也許你只是在尋找最小浮點數:

import sys 
print(sys.float_info.min)