計(jì)算機(jī)的世界只有0和1猫缭,為了表示浮點(diǎn)數(shù)猜丹,就必須要對其編碼」杪現(xiàn)在大家基本上用的都是IEEE浮點(diǎn)編碼表示藏杖,它分為單精度和雙精度兩種編碼格式蝌麸,顧名思義艾疟,雙精度能表示更大的精度。
單精度占用4個字節(jié)也就是32位大小弟疆,雙精度占用8個字節(jié)共64位大小盗冷。
浮點(diǎn)數(shù)編碼成三個部分:
- 符號,代表正負(fù)
- 階碼柑司,由它算出2的多少次冪方锅劝,也就是E
- 尾數(shù),由它算出小數(shù)部分讼育,也就是M
有了這三部分稠集,就可以表示成這樣的公式了
計(jì)算E和M
上面說了E和M是計(jì)算出來的剥纷,現(xiàn)在就來說說怎么計(jì)算
計(jì)算E
先說公式呢铆,E=e-Bias
Bias=2^(k-1)-1
拿單精度來說,階碼占用8位悠垛,那么Bias=2^(8-1)-1=127
注意有一種特殊情況娜谊,叫做非規(guī)格化數(shù),非規(guī)格化數(shù)也就是階碼全為0的情況湾趾,還是單精度舉例,那就是8位階碼全是0搀缠,這時候就知道是非規(guī)格化數(shù)了,這時候E=1-Bias而不是0-Bias艺普,等于-126
除了非規(guī)格化數(shù)就是用上面的公式了,比如階碼=00000011勿侯,那么E=3-127=-124
計(jì)算M
M就簡單多了缴罗,主要也是分為規(guī)格化數(shù)和非規(guī)格化數(shù)情況
- 規(guī)格化數(shù)的情況: 尾數(shù)部分代表1.xxxxxxx這樣xxxx的數(shù),比如單精度的尾數(shù)是1面氓,二進(jìn)制0...(22個0)1,那么M=1+2^(-23)
- 非規(guī)格化數(shù)的情況:尾數(shù)部分代表0.xxxxxx這樣的xxxx的數(shù)掘譬,還是剛才的例子葱轩,M=0+2^(-23)
深入理解計(jì)算機(jī)系統(tǒng)的例子
書中用到的是一個自己設(shè)定的8位的浮點(diǎn)數(shù)藐握,第一位代表符號,中間4位代表階碼猾普,最后3位代表尾數(shù)。首先Bias=2^(4-1)-1=7