1. 程式人生 > >浮點數在計算機中的存儲

浮點數在計算機中的存儲

知識 情況 line style 其中 表示 計算機 cor 取余

一,基礎預備知識

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

(0110循環)

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

*2^(-52)*2^3---十進制為.4*2^(-48),應為53位為1,所以要進一位,增加2^(-52)*2^3---十進制為2^(-49)

所以最後結果為fl(9.4) = 9.4 + 2^(-49) -0.4*2^(-48) = 9.4 + 0.2*2^(-49),誤差為0.2*2^(-49)(rounding error)

                  

浮點數在計算機中的存儲