2011-11-03 43 views
4

有人說,雙精度浮點數的機器epsilon是2^-53,其他(更常見)是2^-52。我使用除了1之外的整數和從上面和下面(在matlab中)進行估計來估計機器精度,並且已經得到兩個值作爲結果。爲什麼這兩種價值觀都可以在實踐中觀察到?我認爲它應該總是在2^-52左右產生一個epsilon。機器精度估計

回答

7

關於術語「機器epsilon」有一個固有的含糊不清,所以要解決這個問題,它通常被定義爲1和下一個更大的可表示數字之間的差異。 (這個數字實際上(並非偶然)通過將二進制表示字面遞增1而獲得)。

IEEE754 64位浮點數具有52個明確的尾數位,所以53包括隱含的前導符號1。因此,兩者的連續編號:

1.0000 ..... 0000 
1.0000 ..... 0001 
    \-- 52 digits --/ 

所以介乎兩者的差爲2 -52

2

這取決於你繞過哪條路。

1 + 2^-53恰好在11 + 2^-52之間,它們在雙精度浮點上是連續的。所以如果你把它四捨五入,它不同於1;如果你把它舍入下去,它等於1.

+0

那麼它是舍入誤差,它允許結果有時顯示爲2^-53,有時顯示爲2^-52?因爲那就是那個讓我很困惑的部分。 – user381261

+0

在數學上,正如Kerrek指出的那樣,'1'和'1 + 2^-52'確實具有連續的雙精度表示。舍入是我可以想象的唯一解釋,爲什麼你的實驗會顯示別的東西。您是否嘗試過添加'1'和(例如)'1.5 * 2^-53'? – Nemo

1

有實際的「機器精度」兩個定義哪個音質上乍一看頗爲相同,但都沒有,因爲他們產生不同的值,爲「機器最小」:

  1. 該機小量是最小浮點數eps1,例如1.0 + x > 1.0
  2. 機器epsilon是差異eps2 = x - 1.0其中xx > 1.0中最小的可表示浮點數。

嚴格從數學上講,定義是等價的,即eps1 == eps2,但我們不是在這裏談論的數字,但對浮點數。這意味着隱含舍入和取消,這意味着,近似地,eps2 == 2 * eps2(至少在使用IEEE-754浮點數的最常見架構中)。

詳細地說,如果我們讓一些x0.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」以避免混淆和錯誤時,請清楚您使用的定義。

+0

不知道爲什麼數學家會畏懼「這個」。一位數學家明白浮點數與實數不同,特別是浮點數的加法不是關聯的。 –

+0

斯蒂芬,這並不意味着要採取110%的嚴肅態度!我完全知道數學家並不愚蠢。但即使我自己,作爲非數學家,也發現這些公式非常尷尬。我的意思是,'1 + x - 1 == x * 2'? Nah ... –

+0

不用擔心,我只是不得不向工程學畢業生(作爲數學家)解釋浮點太多次。 –