double
的儲存方式是一樣的,下面用
float
做以解釋;任意乙個二進位制浮點數v可以表示成下面形式:
v=(-1)^s*m*2^e
(1)(-1)^s表示符號位,當
s = 0,v
為正;當
s = 1,v
為負;(2)
m為有效數字,因為
m是二進位制,大於等於
1,小於2。
(3)2^e表示指數字
舉例來說:
十進位制的5.0,寫成二進位制是
101.0
,相當於
1.01*2^2
。按上面科學計數法的格式,可以得出
s = 0
,m = 1.01
, e = 2
。如果是
-5.0
,s= 1
,m = 1.01. e = 2。
對於單精度浮點數來講,佔32位,每個
bit位存入相應的二進位制數,具體看下面:
下面對s,m,
e如何存入記憶體做以解釋:
s(符號位
):(-1)^s表示符號位,當
s = 0,v
為正;當
s = 1,v
為負;
m(尾數):
1<=m<2;
m要寫成
1.******
的形式,
******
表示小數部分,在把
m存入計算機時,
m的第一位總是
1,因此,可以把第一位
1在每次存入的時候去掉,只存入小數部分,在讀取的時候再在前面加上
1,這樣就可以用
23位全部來存小數部分,等於可以保留
24位有效數字。
e(階碼
):e為乙個無符號整形,e為
8位時,它的取值範圍為
0~255
;若為double型,e
為11,它的取值範圍是
0~2047
。但是,在科學計數法中,
e是可以表示負數的,所以規定,存入記憶體時
e的真實值必須在加上乙個中間值,對於8位的
e,這個中間值位
127;對於
11位的
e,這個中間值位
1023
。在讀取的時候在減去
127。例如,
2^10的e
是10儲存成單精度浮點型,存入記憶體時,必須儲存成
10+127=137
,即10001001
,在讀取時在減去
127。所以e
的真實值的範圍就變成了
127~128.
下面在解釋e的
3中特殊情況:
(1)e不全位
0或不全為
1讀取時指數e的計算值減去
127,得到真實值,再將有效數字
m前加上
1.比如:
0.5的二進位制形式為
0.1,由於規定
m必須大於1小於
2,則0.1的小數點右移
1位,則為
1.0*2^(-1)
,m1.0
去掉正數部分的
1其餘有效位都為0;
e存入時為
-1+127 = 126
,表示為二進位制為
01111110
,,則其二進位制為
0 01111110 00000000000000000000000
(2)e為全
0這時e為最小,浮點數的指數e等於
0-127+1
即為真實值,有效數字
m不再加上第一位的1,
即讀取為0.******的小數。這個數表示正負
0,是乙個接近
0的很小的值。
(3)e位全
1這時,如果有效數字m全位
0,表示正負無窮大(正負取決於符號s)。
對於佔64位的
double,s
佔1位,e
佔11位,m
佔52位
浮點數在計算機中的儲存
float和double在儲存方式上遵從ieee規範!例如 8.25 整數部分 除2取餘倒排 除法商餘數 8 24 04 220 2 21 01 201 餘數倒排 1000 小數部分 乘2取整順排 乘法 積整數部分 0.25 2 0.50 0.5 2 1.01 整數部分順排 01 前兩步結合的結果為...
浮點數在計算機中如何儲存
浮點型變數在計算機記憶體中占用4位元組 byte 即32 bit。遵循ieee 754格式標準。乙個浮點數由2部分組成 底數m 和 指數e。mantissa 2exponent 注意,公式中的mantissa 和 exponent使用二進位制表示 底數部分 使用 進製數來表示此浮點數的實際值。指數部...
計算機中的浮點數
寫這篇blog,是因為在上工程碩士數學時候,又開始講到了浮點數的儲存,運算和精度的問題。這個問題已經見了好多次了,從微機原理的課到計算機視覺處理矩陣時候的conditioning,到這次。但感覺一直都沒有理清楚。所以這次嘗試梳理一下。一般主要分為兩種形式,這裡以8位的儲存進行解釋 所以用浮點數表示數...