2
爲什麼單精度浮點數有7位精度(或雙精度15-16位)?爲什麼IEEE754單精度浮點只有7位精度?
任何人都可以請解釋我們如何到達基於32位分配浮點(符號(32)指數(30-23),分數(22-0))?
爲什麼單精度浮點數有7位精度(或雙精度15-16位)?爲什麼IEEE754單精度浮點只有7位精度?
任何人都可以請解釋我們如何到達基於32位分配浮點(符號(32)指數(30-23),分數(22-0))?
有效數字的23個小數位(22-0)出現在存儲器格式中,但總精度實際上是24位,因爲我們假設有一個前導1.這相當於log10(2^24) ≈ 7.225
十進制數字。
雙精度浮體具有在分數52位,加上前導1是53.因此,一個雙能容納log10(2^53) ≈ 15.955
十進制數字,不太16.
注:前導1不是一個符號位。它實際上是(-1)^sign * 1.ffffffff * 2^(eeee-constant)
,但我們不需要在分數中存儲前導1。符號位仍然必須存儲
有些數字不能表示爲2的冪的總和,如1/9:
>>>> double d = 0.111111111111111;
>>>> System.out.println(d + "\n" + d*10);
0.111111111111111
1.1111111111111098
如果財政計劃分別做這種計算一遍又一遍地沒有自我糾正,最終會出現差異。
>>>> double d = 0.111111111111111;
>>>> double sum = 0;
>>>> for(int i=0; i<1000000000; i++) {sum+=d;}
>>>> System.out.println(sum);
111111108.91914201
經過10億次總結,我們失蹤超過2美元。
前導1不是符號位。它實際上是'(-1)^ sign * 1.ffffffff * 2 ^(eeee-constant)',但我們不需要在分數中存儲前導1。標誌位必須仍然存儲 – Ron
我在某些托盤中看到他們提到了浮動的精度(15 - 16)。 Ever ** 15.955 **將** ** 16 **? –
@ jb_2519正如Ron所示,雙精度浮點數的精度爲15.955 *十進制*位。這意味着你可以很好地依靠前15 *十位*精確的數字,任何後面的數字只能部分表示。就個人而言,我不會依賴任何超過第14位(或第6位的單精度)的十進制數字。 – Corey