介绍一种浮点数表示算法

因为掩藏的事没有不显出来的;隐瞒的事没有不露出来被人知道的。

——路加福音【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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值