浮點數的表示

          浮點數分爲單精度(float)和雙精度(double),它們的表示方法很特別,區別於整數,咱們經常使用的十進制表示法也有窮盡不能表示的數,更不用說二進制了,那麼他們是怎麼表示的呢?編碼

          首先要知道11.11(二進制) 這個該怎麼換算?  11.11 = 1*2^1+1*2^0+1*2^-1+1*2^-2   以此類推。二進制

          那麼計算機表示浮點數,須要三種位模式+兩個常數,符號位(1位)+ 階碼位(k位)+ 尾數位(n位) , 一個常數bias做爲偏置量,bias=2^(k-1)-1,一個常數是1。1.11*2^4 = 11100 ,1.11*2^-4 = 0.000111   階碼就是指數,小數點後面乘號以前是尾數位,符號位不說了。很簡單對吧,可是這裏有小細節! 指數並非單純的階碼而已,階碼-bias = 指數,咱們假定六位浮點數中,k=3,n=2,那麼bias=3,隨便拿一個數出來,0 110 11,  爲了容易看我分開寫了,階碼=110=6   指數 = 6-3 = 3; 那尾數位怎麼辦呢,尾數位=11 最後寫出來就是 0.11*2^3 可是這不符合科學計數法標準,因此加一!那麼最後結果就是 1.11*2 ^3 = 14  這也是六位浮點數所能表示的最大正數,爲何呢? 110上邊還有111呢? 14怎麼多是最大的,事實是階碼 000 和 111 被佔用了 用來表示一些特殊的數,因此階碼編碼只能從 001 到 110,因此想固然 0 001 11 是最小的負數。float

          上面說了 階碼000 和 111 被用來表示一些特殊的數,什麼數呢? 仍是6位浮點數  011100 表示正無窮; 111100 表示負無窮。固然還有其餘的數這裏就不說了(原本想畫個數軸來表示,會更好一點,但是,不知道怎麼畫,總不能在紙上畫出來用照片截吧=。=)方法

          以爲仍是要補充一點,階碼爲00000~的時候,指數應該等於 1-bias,而且尾數位也不用加1了,這樣就會算出不少很奇葩的數。。。。計算機

相關文章
相關標籤/搜索