介紹一種浮點數表示算法

因爲掩藏的事沒有不顯出來的;隱瞞的事沒有不露出來被人知道的。

——路加福音【8:17】

一、說明

1.本文爲各傳感器合理範圍內的數值(DATA)提供數據表示方案。

2.數據由四個字節組成,能夠表示正負數、範圍內的單精度浮點數。

3.取值範圍:


4.最接近於零的值:


5.有效精度爲0.0005。由於採用IEEE754表示的數據,當表示較大數據時有效精度偏大,故不採用IEEE754標準的數據表示方法。

6.本文中的十六進制數值總稱統一使用DATA表示。

二、標準數據格式

1.格式說明

DATA共計32位(4字節)

31位是符號位,1表示該數爲負,0表示該數爲負

30~26位一共5位是 指數位(-16~15

25~0位一共26位是尾數位,尾數的編碼爲原碼

從邏輯上用三元組{S,E,M}來表示一個數N:

 

2.數據表示

◆表達式:

 

◆說明:

n,s,e,m分別爲N,S,E,M對應的實際數值,N,S,E,M僅僅是一串二進制位。
★ S(sign)表示N的符號位。對應值s滿足:n>0時,s=0; n<0時,s=1
★ E(exponent)表示N的指數位,位於SM之間的若干位。對應值e值也可正可負。
★ M(mantissa)表示N的尾數位,包含數據的整數部分和小數部分,根據指數位進行區分。

3.計算方法

s的取值爲01

m包含的位數爲26bit位;

☆隱含位:表達式中 1.m 中小數點左邊的那一位被稱作隱含位,隱含位大多數情況下爲1,只有當E0的情況下爲0

☆本算法的偏置量爲16

e的值計算方式:

E(0,25-1]時,e=E-16,E=10101,所以e=22-16=6

E=0時,e=1-16

 

依據隱含位和E值的處理能夠實現大於1和小於1的正數之間的平滑過度。

三、數據轉化用例

1.特殊用例

表示最大正數

二進制:0111 1111 1111 1111 1111 1111 1111 1111

十六進制:7F FF FF FF

計算過程:

s=0

e=(11111)2-(16)10=15

m=(11 1111 1111 1111 1111 1111 1111)2

N = (-1)0*(1.11 1111 1111 1111 1111 1111 1111)2*215

= 216-(1/2)11= 65535.99951171875

表示的值爲:65535.99951171875

 

表示最小負數

二進制:1111 1111 1111 1111 1111 1111 1111 1111

十六進制:FF FF FF FF

計算過程:

s=1

e=(11111)2-(16)10=15

m=(11 1111 1111 1111 1111 1111 1111)2

N = (-1)1*(1.11 1111 1111 1111 1111 1111 1111)2*215

= -216+(1/2)11= -65535.99951171875

表示的值爲:-65535.99951171875

 

表示最接近於0的正數

二進制:0000 0000 0000 0000 0000 0000 0000 0001

十六進制:00 00 00 01

計算過程:

s=0

e=(1)10-(16)10= -15

m=(00 0000 0000 0000 0000 0000 0001)2

N = (-1)0*(0.00 0000 0000 0000 0000 0000 0001)2*2-15

= 2-41 = 4.5474735088646411895751953125*10-13

表示的值爲:4.5474735088646411895751953125*10-13

 

表示最接近於0的負數

二進制:1000 0000 0000 0000 0000 0000 0000 0001

十六進制:80 00 00 01

計算過程:

s=1

e=(1)10-(16)10= -15

m=(00 0000 0000 0000 0000 0000 0001)2

N = (-1)1*(0.00 0000 0000 0000 0000 0000 0001)2*2-15

= -2-41 = -4.5474735088646411895751953125*10-13

表示的值爲:-4.5474735088646411895751953125*10-13

 

兩種方式表示的過渡值

二進制:0000 0011 1111 1111 1111 1111 1111 1111

十六進制:03 FF FF FF

計算過程:

s=0

e=(1)10-(16)10= -15

m=(11 1111 1111 1111 1111 1111 1111)2

N = (-1)0*(0.11 1111 1111 1111 1111 1111 1111)2*2-15

= (1-2-26) *2-15= 3.051757767025264911353588104248*10-5

表示的值爲:3.051757767025264911353588104248*10-5

 

二進制:0000 0111 1111 1111 1111 1111 1111 1111

十六進制:07 FF FF FF

計算過程:

s=0

e=(000 01)2-(16)10= -15

m=(11 1111 1111 1111 1111 1111 1111)2

N = (-1)0*(1.11 1111 1111 1111 1111 1111 1111)2*2-15

= (2-2-26) *2-15= 6.103515579525264911353588104248*10-5

表示的值爲:6.103515579525264911353588104248*10-5

 

1的表示

二進制:0100 0000 0000 0000 0000 0000 0000 0000

十六進制:40 00 00 00

計算過程:

s=0

e=(100 00)10-(16)10= 0

m=(00 0000 0000 0000 0000 0000 0000)2

N = (-1)0*(1.00 0000 0000 0000 0000 0000 0000)2*20

= 1

表示的值爲:1

2.典型用例

①十進制數:1234.5678

計算過程:

1234.5678 = 210+27+26+24+21+2-1+2-4+2-8+2-10+2-12+2-13+2-15+2-16

 ≈1234.5677947998046875

s=0

e=10,E=10+16=(26)10=(11010)2

m=10011010010.1001000101011011,M=00 1101 0010 1001 0001 0101 1011

二進制數:0110 1000 1101 0010 1001 0001 0101 1011

十六進制數:68 D2 91 5B

 

②十進制數:37.61

計算過程:

37.61 = 25+22+20+2-1+2-4+2-5+2-6+2-11+2-13+2-17+2-18+2-19+2-20

 37.60999965667724609375

s=0

e=5,E=5+16=(21)10=(10101)2

m=100101.100111000010100011110,M=00 1011 0011 1000 0101 0001 1110

二進制數:0101 0100 1011 0011 1000 0101 0001 1110

十六進制數:54 B3 85 1E

 

③十進制數:-99.3745

計算過程:

99.3745 = 26+25+21+20+2-2+2-4+2-5+2-6+2-7+2-8+2-9+2-10+2-12+2-13+2-14+2-15+2-16+2-19+2-20

    99.37449932098388671875

s=1

e=6,E=6+16=(22)10=(10110)2

m=1100011.01011111110111110011,M=10 0011 0101 1111 1101 1111 0011

二進制數:1101 1010 0011 0101 1111 1101 1111 0011

十六進制數:DA 35 FD F3

 

④十進制數:-8.875

計算過程:

8.875 = 23+2-1+2-2+2-3

s=1

e=3,E=3+16=(19)10=(10011)2

m=1000.11100000000000000000000,M=00 0111 0000 0000 0000 0000 0000

二進制數:1100 1100 0111 0000 0000 0000 0000 0000

十六進制數:CC 70 00 00


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章