有人說,雙精度浮點數的機器epsilon是2^-53,其他(更常見)是2^-52。我使用除了1之外的整數和從上面和下面(在matlab中)進行估計來估計機器精度,並且已經得到兩個值作爲結果。爲什麼這兩種價值觀都可以在實踐中觀察到?我認爲它應該總是在2^-52左右產生一個epsilon。機器精度估計
機器精度估計
回答
關於術語「機器epsilon」有一個固有的含糊不清,所以要解決這個問題,它通常被定義爲1
和下一個更大的可表示數字之間的差異。 (這個數字實際上(並非偶然)通過將二進制表示字面遞增1而獲得)。
IEEE754 64位浮點數具有52個明確的尾數位,所以53包括隱含的前導符號1
。因此,兩者的連續編號:
1.0000 ..... 0000
1.0000 ..... 0001
\-- 52 digits --/
所以介乎兩者的差爲2 -52。
這取決於你繞過哪條路。
1 + 2^-53
恰好在1
和1 + 2^-52
之間,它們在雙精度浮點上是連續的。所以如果你把它四捨五入,它不同於1;如果你把它舍入下去,它等於1.
有實際的「機器精度」兩個定義哪個音質上乍一看頗爲相同,但都沒有,因爲他們產生不同的值,爲「機器最小」:
- 該機小量是最小浮點數
eps1
,例如1.0 + x > 1.0
。 - 機器epsilon是差異
eps2 = x - 1.0
其中x
是x > 1.0
中最小的可表示浮點數。
嚴格從數學上講,定義是等價的,即eps1 == eps2
,但我們不是在這裏談論實的數字,但對浮點數。這意味着隱含舍入和取消,這意味着,近似地,eps2 == 2 * eps2
(至少在使用IEEE-754浮點數的最常見架構中)。
詳細地說,如果我們讓一些x
從0.0
去一些點1.0 + x > 1.0
,在x == eps1
達到(定義1)這一點。但是,由於綜合,1.0 + eps1
的結果是而不是1.0 + eps1
,但下一個可表示的浮點值大於比1.0 - 即eps2
(定義2)。因此,在本質上,
eps2 == (1.0 + eps1) - 1.0
(數學家都擔心這個。)並且由於四捨五入的行爲,這意味着
eps2 == eps1 * 2 (approximatively)
這就是爲什麼有「機器小量」兩個定義,既合法又正確。個人而言,我發現eps2
更「健壯」的定義,因爲它不取決於實際的舍入行爲,只取決於表示,但我不會說它比其他更正確。像往常一樣,這一切都取決於上下文。在談論「機器epsilon」以避免混淆和錯誤時,請清楚您使用的定義。
不知道爲什麼數學家會畏懼「這個」。一位數學家明白浮點數與實數不同,特別是浮點數的加法不是關聯的。 –
斯蒂芬,這並不意味着要採取110%的嚴肅態度!我完全知道數學家並不愚蠢。但即使我自己,作爲非數學家,也發現這些公式非常尷尬。我的意思是,'1 + x - 1 == x * 2'? Nah ... –
不用擔心,我只是不得不向工程學畢業生(作爲數學家)解釋浮點太多次。 –
- 1. 機器精度
- 2. 計算精度
- 3. 計算精度
- 4. 精確計算雙精度
- 5. 32位機器如何計算雙精度數字
- 6. 機器學習和m估計
- 7. Android加速度計精度
- 8. GPS精度計算
- 9. 不計算精度
- 10. 機器學習精度顯示爲0
- 11. 機器最小精度差異
- 12. Excel的機器精度比較
- 13. For loop評估精度不執行
- 14. 計算機圖形學中的核密度估計
- 15. 彈簧@Scheduled計時器精度
- 16. 高精度事件計時器
- 17. 相機位移的估計
- 18. OpenCV:相機姿態估計
- 19. 相機姿態估計
- 20. 什麼評估分類器?精確度和召回率?
- 21. knn密度估計R
- 22. 密度估計在該R
- 23. 核密度估計julia
- 24. C#System.Numerics.BigInteger幅度估計
- 25. 機器精度以及雙精度型的最大值和最小值
- 26. 計算質心和精度
- 27. 預計Google Glass GPS精度
- 28. NSNumber計算和精度?
- 29. java算法精度計算
- 30. SQL計算輸出精度
那麼它是舍入誤差,它允許結果有時顯示爲2^-53,有時顯示爲2^-52?因爲那就是那個讓我很困惑的部分。 – user381261
在數學上,正如Kerrek指出的那樣,'1'和'1 + 2^-52'確實具有連續的雙精度表示。舍入是我可以想象的唯一解釋,爲什麼你的實驗會顯示別的東西。您是否嘗試過添加'1'和(例如)'1.5 * 2^-53'? – Nemo