我試圖計算最接近的數字0,但不能得到我想要的東西。計算最接近的數字numpy
我有一個相當簡單的代碼;
y = 0.0
x = 0.1
while (y + x > y):
x = x/2.0
x*2
但我一直得到0.0作爲輸出。我怎樣才能解決這個
我試圖計算最接近的數字0,但不能得到我想要的東西。計算最接近的數字numpy
我有一個相當簡單的代碼;
y = 0.0
x = 0.1
while (y + x > y):
x = x/2.0
x*2
但我一直得到0.0作爲輸出。我怎樣才能解決這個
我猜你要不斷分裂,直到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
你可以簡單地使用np.nextafter
:
>>> np.nextafter(0, 1)
4.9406564584124654e-324
也許你只是在尋找最小浮點數:
import sys
print(sys.float_info.min)