溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

浮點(diǎn)數(shù)的存儲(chǔ)

發(fā)布時(shí)間:2020-07-14 20:51:59 來源:網(wǎng)絡(luò) 閱讀:793 作者:程紅玲OOO 欄目:編程語言

讀了陳皓老師的魔數(shù)一文,對(duì)浮點(diǎn)數(shù)的存儲(chǔ)有了比較清晰的理解

float的存儲(chǔ)是32位的,而double的存儲(chǔ)方式是64位

存儲(chǔ)格式如下圖
浮點(diǎn)數(shù)的存儲(chǔ)

以64位雙精度來說

S是符號(hào)位,0為正數(shù),1為負(fù)數(shù)
E是指數(shù)部分,11位可以表示的范圍是0~2047,為了能表示負(fù)數(shù),這11位表示的數(shù)范圍是-1023~1023

每個(gè)浮點(diǎn)數(shù)都可以表示為2^n < 浮點(diǎn)數(shù) < 2^(n+1)的形式
這里的n+1023就是指數(shù)E,以3.14為例子,2^1 < 3.14 < 2^2,E=1024
52bit可以表示的數(shù)是0~2^52-1,即2^52個(gè)數(shù),我們可以把2^n~2^(n+1)分成2^52等份,看浮點(diǎn)占了多少比例,以3.14為例子,(3.14-2)/(4-2)=0.57,則0.57*2^52=2567051787601182.72,四舍五入M=2567051787601183

所以3.14在計(jì)算機(jī)中的存儲(chǔ)為
0 10000000000 1001000111101011100001010001111010111000010100011111

浮點(diǎn)數(shù)的計(jì)算方式:
(-1)^S (1 + (M / 2^23)) (2 ^ E-127)
64位的就類似下面這個(gè)式子了
(-1)^S (1 + (M / 2^52)) (2 ^ E-1023)

(-1)^0 (1 + 0.57000000000000006217248937900877) (2 ^ 1) = 3.1400000000000001243449787580175
有一定的誤差

《完》

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI