计算机算法中的数字表示法——浮点数


微信公众号含更多FPGA相关源码:
在这里插入图片描述

1.前言

前面讲了定点表示法,定点表示法有一个主要的限制,那就是它不能有效地表示非常大或非常小的数,因为小数点的位置是固定的。为了解决这个问题,人们发明了浮点表示法,其中小数点的位置是浮动的,可以根据需要移动以表示不同大小的数。

2.浮点数的形式

浮点数制可以在更大的动态范围内提供更高的分辨率,通常当定点数由于受其精度和动态范围所限不能胜任时,浮点数就能够为之提供解决方案。当然,同时也在速度和复杂程度方面带来了损失,大多数浮点数制都遵循单精度或者双精度的IEEE浮点数标准。标准浮点数字长由一个符号位S、指数e和无符号(小数)的规格化尾数m构成。其格式如下:

符号位指数无符号尾数
Sem

浮点数字长的代数表达式如下:
X = ( − 1 ) S × 1. m × 2 e − b i a s X=(-1)^S \times 1.m \times2^{e-bias} X=(1)S×1.m×2ebias

IEEE单精度格式

IEEE单精度和双精度格式的其他参数请参阅下表。

IEEE 浮点数标准:

单 精 度双 精 度
字长3264
尾数2352
指数811
编移 Bias1271023
范围 2 138 = 3.8 × 1 0 38 2^{138}=3.8\times10^{38} 2138=3.8×1038 2 1024   9 × 1 0 307 2^{1024}~9\times10^{307} 21024 9×10307

根据国际标准 IEEE 754,任意一个二进制浮点数 X 可以表示成下面的形式:
X = ( − 1 ) S × m × 2 e X=(-1)^S \times m \times2^e X=(1)S×m×2e
其中, ( − 1 ) s (-1)^s (1)s表示符号位,当 s = 0 , X s=0,X s=0X为正数;当 s = 1 , X s=1,X s=1X为负数。

M表示有效数字,大于等于1,小于2。

2 e 2^e 2e表示指数位。

3.举例说明

举例来说,十进制的 5.0,写成二进制是 101.0,相当于 1.01×2^2。那么,按照上面 V 的格式,可以得出 s=0,M=1.01,E=2。

十进制的 - 5.0,写成二进制是 - 101.0,相当于 - 1.01×2^2。那么,s=1,m=1.01,e=2。
IEEE 754 规定,对于 32 位的浮点数,最高的 1 位是符号位 s,接着的 8 位是指数 e,剩下的 23 位为有效数字 m。

32位浮点数

对于 64 位的浮点数,最高的 1 位是符号位 S,接着的 11 位是指数 e,剩下的 52 位为有效数字 m。

64 位浮点数

IEEE 754 对有效数字 m 和指数 e,还有一些特别规定。
前面说过,1≤m<2,也就是说,m 可以写成 1.xxxxxx 的形式,其中 xxxxxx 表示小数部分。IEEE 754 规定,在计算机内部保存 m 时,默认这个数的第一位总是 1,因此可以被舍去,只保存后面的 xxxxxx 部分。比如保存 1.01 的时候,只保存 01,等到读取的时候,再把第一位的 1 加上去。这样做的目的,是节省 1 位有效数字。以 32 位浮点数为例,留给 m 只有 23 位,将第一位的 1 舍去以后,等于可以保存 24 位有效数字。

至于指数 E,情况就比较复杂。首先,e 为一个无符号整数 (unsigned int)。这意味着,如果 e 为 8 位,它的取值范围为 0255;如果 e 为 11 位,它的取值范围为 02047。但是,我们知道,科学计数法中的 e 是可以出现负数的,所以 IEEE 754 规定,e 的真实值必须再减去一个中间数,对于 8 位的 E,这个中间数是 127;对于 11 位的 e,这个中间数是 1023。
比如,2^10 的 e 是 10,所以保存成 32 位浮点数时,必须保存成 10+127=137,即 10001001。

然后,指数 e 还可以再分成三种情况:

(1) e 不全为 0 或不全为 1。这时,浮点数就采用上面的规则表示,即指数 e 的计算值减去 127 (或 1023),得到真实值,再将有效数字 m 前加上第一位的 1。

(2) e 全为 0。这时,浮点数的指数 e 等于 1-127 (或者 1-1023),有效数字 m 不再加上第一位的 1,而是还原为 0.xxxxxx 的小数。这样做是为了表示 ±0,以及接近于 0 的很小的数字。

(3) e 全为 1。这时,如果有效数字 m 全为 0,表示 ± 无穷大 (正负取决于符号位 s);如果有效数字 M 不全为 0,表示这个数不是一个数 (NaN)。

4.浮点数四则运算

在浮点数乘法中,尾数部分可以像定点数一样相乘,而把指数部分析加。浮点数减法通常公更加复杂一些,这是因为首先要将尾数归一化,就是要将两个数都调整到较大的指数。然后再将两个尾数相加。对于加法和乘法混和运算来说,最终的归一化,就是将结果尾数再统一成小数1.m 形式的表达式,这是非常必要的。

微信公众号含更多FPGA相关源码:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值