首页 理论教育浮点数据类型在ARM嵌入式系统中的应用

浮点数据类型在ARM嵌入式系统中的应用

【摘要】:该标准定义了32位浮点和64位双精度浮点二进制小数。表2.2两种精度浮点数移码以双精度的为例。方括号表示的就是小数点后第24位了,由于单精度浮点数尾数只有23位,所以需要舍入:由于第24位为1,且之后不全为0,所以需要向第23位进1完成上舍入:1.10010001111010111000011×21。综上所述,3.14的单精度浮点数表示为:0 000-1000-0000 1001-0001-1110-1011-1000-011十六进制代码为:0x4048F5C3

很多时候我们要处理的数据,除了整数和字符串,还有浮点数即小数。下面我们就来探究一下ARM核浮点数据。

1.浮点数据类型存储格式

在ARM体系中,浮点数是按照IEEE标准存储的。该标准定义了32位浮点和64位双精度浮点二进制小数。浮点二进制小数三部分组成:符号位、指数位和尾数位三部分组成。具体存储格式如表2.1所示。

表2.1 浮点数存储格式

2.浮点数据类型表示方法

对于将某个实数表示为计算机浮点数,首先要将其正规化,也就是表示为形如:

±1.bbbb…×2p

的样子。其中b是0或1,而p二进制数表示的指数位。这样,假设想表示为单精度的浮点数,那么第一位符号位用0表示正,用1表示负,在将指数p加上移码表示为8位的二进制数,在接下来的23位填充位数b部分。由于正规化表示时,最左边部分总是1,所以我们只需表示23位的尾数即可。

上述中有一个词:移码(exponential bias)。因为指数p有正有负,那么在8位的指数位中我们就要拿出第一位来指示符号,这样显然会造成不必要的浪费。给指数加上移码,就能保证结果总是一个非负数,也就可以将8个指数位都利用起来。对于有M个指数位的精度,其移码为:2M-1-1。

这样就得到上面两种精度的移码,见表2.2。

表2.2 两种精度浮点数移码(www.chuimin.cn)

以双精度的为例。双精度的指数位有11位。这样可以表示的数是从000 0000 0000到111 1111 1111,也就是指数加移码所表示的范围从0到2047,那么,减去移码1023,则可以表示的指数是-1023到1024。但是注意,-1023和1024作为他用(具体见IEEE754标准)。所以实际上能表示数的指数是从-1022到1023。

【例】2.4.1:求3.14的单精度浮点数表示。

解:①将3.14转成二进制。

整数部分3的二进制是11b,而小数部分0.14的二进制是:0.0010001111010111000010[10001111.....]b(方括号中表示小数点后第23位及之后)。

②将3.14二进制数正规化表示。

3.14的二进制代码就是:11.0010001111010111000010[10001111....]×20,那么用正规化表示就是:1.10010001111010111000010[10001111....]×21。方括号表示的就是小数点后第24位了,由于单精度浮点数尾数只有23位,所以需要舍入:由于第24位为1,且之后不全为0,所以需要向第23位进1完成上舍入:1.10010001111010111000011×21

③移码。

其指数是1,需要加上移码127,即128,也就是(000 1000 0000)b。它又是正数,所以符号为0。综上所述,3.14的单精度浮点数表示为:

0 000-1000-0000 1001-0001-1110-1011-1000-011

十六进制代码为:0x4048F5C3