IEEE二進制浮點數算術標準學習

  看到有網上有個項目是要求將浮點數用二進制表示出來,須要用IEEE754標準,查了查維基和深刻理解計算機系統,從新學習了一遍浮點數在計算機中的表示和內存中的存儲,算法

先簡單的作個筆記,後面須要更深刻的理解。學習

IEEE754定義了四種表示浮點數的方式:單精度(32bit),雙精度(64bit),延伸單精度(43bit以上),延伸雙精度(79bit以上),後二者不多使用,這裏講的是前面兩種。編碼

 

用二進制來表示浮點數分三個部分,如下都已32bit的單精度爲例,雙精度相似能夠推算出來:spa

三部分爲:符號位(sign)、指數(exponent)、尾數(significand,存儲二進制小數部分),下面是維基上的圖:blog

 

 

單精度浮點數中,sign爲1bit,exponent爲8bit,significand爲23bit,三部分組成32bit。內存

 

還有一個概念比較重要「指數偏移值」,在IEEE754中指浮點數表示中的指數域(exponent)的編碼值爲指數的實際值加上一個固定值,這個固定值的算法是2e-1 - 1it

在單精度浮點數中爲128-1 = 127.循環

 

小數部分定義是f=0.fn-1fn-2...f0,二進制小數點在最高有效位的左邊,而有小數定義爲M=1 + f,因此M表示成1.fn-1...f0,經過調整指數,使有效數M在1~2之間二進制

看一個例子8.25,im

轉換成二進制表示1000.01 能夠表示成 1.00001 *23

因此指數E = 3 + 127 = 130

因此8.25在內存中表示是:

0 10000010 00001000000000000000000

其中對於小數部分如何轉換成二進制,能夠按一下方式小數部分*2,取整數部分值(0或者1)

,而後繼續取結果的小數部分*2,在取整數部分,一直循環,直到取得想要的位數,

如0.25 *2 = 0.5, 整數部分爲0,而後0.5*2=1.0,整數部分爲1,因此二進制表示爲0.0100000..00

指數的取值範圍是從-126~127,因此當一個浮點數如0.25,時能夠表示成1.000*2-2

因此指數偏移值爲-2 + 127=125

 在內存中表示是

0 01111101 00000000000000000000000

 

以上都是浮點表示中規格化值的用法,其餘還有非規格化和特殊值兩種,之後再補充。

相關文章
相關標籤/搜索