浮點數在計算機中的存儲
一,基礎預備知識
1,十進制轉換為二進制
1.1 整數部分:
連續,除以2,取余數,余數為0或1,53 / 2 = 26R1 26 / 2 = 13R0 13 / 2 = 6R1 6 / 2 = 3 R0 3 / 2 = 1 R1 1/2 = 0R1 ,對應二進制為110101(從右往左)
1.2 小數部分:
連續乘以2,大於1取1,如0.7轉換成二進制為:0.7*2 = .4 + 1 0.4*2 = 0.8 + 0 0.8*2 = 0.6 + 1 0.6*2 = 0.2 +1 0.2*2 = 0.4 + 0(進入循 環),對應二進制為10110....(從左往右) 所以十進制53.7轉換二進制為:110101.10110
2,二進制轉換成十進制:
2.1 對應位數次方,分數位為負數次方
二,IEEE標準
1,浮點數格式:包含三個部分,符號位(+或者是-),指數位,尾數,格式為+1.bbbb...b*2^p
精度 | sign | exponent | mantissa |
single | 1 | 8 | 23 |
double | 1 | 11 | 52 |
long double | 1 | 15 | 64 |
例如十進制9,二進制為1001,存儲方式為+1.001*2^3
2,對double的討論
2.1 double精度1,二進制為+1.000...00(52個0)*2^0,下一個比1大的數為+1.000...01*2^0,十進制為1+2^(-52)
益普希龍mach為1與比1大的最小浮點數的差值,為2^(-52),9.4---1001.0110----double格式為+1.0010110...1100*2^3
2.1 當尾數超出52位時需要舍去余下部分,分為兩種:chopping與rounding,其中chopping簡單就是把超出52位的扔掉(不好)
2.2 rounding:類似於十進制的四舍五入,rounding分為兩種情況,當52為以後為:(52位)100....(全為0),進位和舍去取決於哪種使得52為0
其余情況為53為1就進位,為0就舍去
2.3 十進制9.4在雙精度表示下的誤差:9.4---1.110.....1100|110...舍去部分為: .1100
所以最後結果為fl(9.4) = 9.4 + 2^(-49) -0.4*2^(-48) = 9.4 + 0.2*2^(-49),誤差為0.2*2^(-49)(rounding error)
浮點數在計算機中的存儲