浮點數的間隙

2022-05-03 02:12:10 字數 997 閱讀 2955

有大佬聊深度學習時,突然問了乙個問題,如果乙個float從0開始,以乙個很小的步長比如0.000001不停做累加,最後會發生什麼?

當然是一臉懵逼,對問題本身以及背後的問題一無所知。照著他的提示,間斷做個實驗,結果貼在這裡:

第一列是最後停留的數,第二列是累加次數,第三列是步長

stop: 3.05176e-05 total: 24945431 step: 1e-12

stop: 0.000244141 total: 24945431 step: 8e-12

stop: 0.00195312 total: 24945431 step: 6.4e-11

stop: 0.015625 total: 24945431 step: 5.12e-10

stop: 0.125 total: 24945431 step: 4.096e-09

stop: 1 total: 24945431 step: 3.2768e-08

stop: 8 total: 24945431 step: 2.62144e-07

stop: 64 total: 24945431 step: 2.09715e-06

stop: 512 total: 24945431 step: 1.67772e-05

stop: 4096 total: 24945431 step: 0.000134218

stop: 32768 total: 24945431 step: 0.00107374

stop: 262144 total: 24945431 step: 0.00858993

stop: 2.09715e+06 total: 24945431 step: 0.0687195

stop: 1.67772e+07 total: 24945431 step: 0.549756

浮點數之間的間隙遠超過我的想象,比如512.0f下乙個浮點數的間隔大於0.00001,這意味這什麼,

如果神經網路訓練過程中,反向傳播中梯度過低,根本不會對引數有任何影響,梯度消失

浮點數的儲存以及 浮點數的比較

浮點數的儲存採用的是近似的原理 float儲存格式為 s e m 1位符號位 8位指數 23位尾數 轉成數值即為 v 1 s 1.m 2 e 127 對於16.5轉成二進位制為00010000.1 1.00001 2 4,那麼在記憶體的表示為 符號位 指數4 127 131 尾數 0 1000001...

浮點數 儲存

關鍵字 體系結構 ieee754 浮點數 儲存 main 如果不執行上面的 讓我們來直接判斷,輸出的結果會是什麼?而在你執行程式之後,結果卻很讓人詫異 123.456001。為什麼會是123.456001?有六位小數可以理解,最後那個1是為何?有很多人解釋說最後那個1是亂碼,隨機的。嘿嘿 其實無論你...

浮點數操作

float fx 49.03f int nx fx 100 printf d nx 執行上述 結果 4902。用vc6.0,2005,gcc編譯執行結果都是一樣。為什麼會這樣呢,是因為浮點數運算具有不精確性。其實編譯上面的 編譯器會有警告的。warning c4244 initializing co...