IEEE754浮点数标准相关

①浮点数值的分类(规格化…)

②如何从小数转换成浮点数

③最小不能精确表示的整数

定点表示法:小数点固定,定点整数中小数点隐含固定在数据最右端,定点小数中小数点隐含固定在数据最左端。这种方法并不能有效地表示数字非常大的数,比如 5 ∗ 2 100 5*2^{100} 52100,用定点表示法需要101后面跟随100个0来组成,这显然不够高效方便。

浮点数表示法:类似“科学计数法”的思路,可以表示极大或者极小的数字,小数点不是固定的。IEEE 754浮点标准:32位单精度,64位双精度,128位四精度。
                                                            V = ( − 1 ) S ∗ 2 E ∗ M V=(-1)^S*2^E*M V=(1)S2EM

  • 符号S:判断正负。

  • 阶码E:是浮点数的加权,类似于“科学计数法”中10右上角的指数,以此来缩小所需的存储空间。

  • 尾数M:表示浮点数中的有效位数

规格化

浮点数的尾数总是规格化的,范围为 1.000 … 0 ∗ 2 E 1.000…0*2^E 1.00002E 1.111 … ∗ 2 E 1.111…*2^E 1.1112E,规格化下最高位总是1,这使得尾数所有位都是有效的,精度最高。因此存入存储器的时候,f != M,f是去掉1后M的小数部分。而对于阶码E,存在一个叫做偏置值的概念,即E是真正的指数,但8位的阶码位e必须得是大于0的二进制数,这样做的优点是,若E是最小的负指数,阶码位e可以变成00000000来表示,这样0就可以用尾数0和0来表示。单精度下偏置数Bais一般为127,而E=e-Bais。当e在[ 1,127 ) E是负数, [ 127, 254 ]E是正数。之所以偏置数设为127,正是出于平分负数和正数的考虑。

非规格化

当阶码域全为0时,所表示的数就是非规格化形式,这种情况下E=1-Bias。假定8位浮点格式,符号位为1,阶码位为4,尾数位为3,因此偏置码为 2 4 − 1 − 1 = 7 2^{4-1}-1=7 2411=7,E=1-7=-6。相较于E=-Bais,E=1-Bais从非规格化数到规格化数过渡会更加平滑。

特殊值

1.当阶码位全为1,而小数位全为0时,表示得到的数是无穷大,s=0则为正无穷大,s=1则为负无穷大。单精度下,相当于 ( − 1 ) S ∗ 1.0 ∗ 2 255 (-1)^S*1.0*2^{255} (1)S1.02255,二进制表示的话已经是上限容量了。

2.当阶码位全为1,但小数位不为0时,我们得到非数(NaN),即IEEE754标准格式不能表示的数。

举个例子:

1.将十进制数4100.125转换成IEEE754下标准的32位单精度二进制浮点数
①十进制转二进制
4100=1000000000100,0.125=0.001
故4100.125=10000000001000.001
②将二进制数规格化
10000000001000.001 = 1.0000000001000001 ∗ 2 13 10000000001000.001=1.0000000001000001*2^{13} 10000000001000.001=1.0000000001000001213
S=0,M=0000000001000001,e=13+127=140(D)=10001100(B)
因此结果是0 10001100 000000000100000100000000

2.浮点数转十进制同理

舍入
IEEE754标准中规定,缺省的舍入应该往最近的值舍入。如果一个数与两个最近的可表示的值的距离相等,则选择最低位为0的作为舍入值,也就是说,向偶数值舍入。同时提供了其他三种舍入模式。

举个例子,例如有效数字超出规定数位的多余数字是1001,它大于超出规定最低位的一半(即0.5),故最低位进1。如果多余数字是0111,它小于最低位的一半,则舍掉多余数字(截断尾数、截尾)即可。对于多余数字是1000、正好是最低位一半的特殊情况,最低位为0则舍掉多余位,最低位为1则进位1、使得最低位仍为0(偶数)。

运算

相乘

相加(不能直接相加),如下指数不齐的情况,为了对齐指数,需要:

1.找出指数较小的那个数。
2.使两个指数相同。
3.尾数相加或相减。
4.规格化结果。

因此最终结果是 1.00001111 ∗ 2 5 1.00001111*2^5 1.0000111125

最小不能精确表示的整数

表达式 ( − 1 ) S ∗ 2 E ∗ M (−1)^S* 2^E*M (1)S2EM,M是一个小数并且它的位数是23,那么它的小数部分最小就是 2 − 23 2^{−23} 223。我们可以想象,当E≤23的情况下,每当M的小数位增1的时候,M的小数位都找到唯一一个与之对应的幂次 E ′ E' E,使得 2 E ′ ∗ 2 E = 1 2^{E'}*2^E=1 2E2E=1。也就是说此时每当M加1,都是可以进行精确表示的。

当E>23的时候,不妨取E=24,就算是M的最低位增1,那么也是 2 − 23 ∗ 2 24 = 2 2^{−23}*2^{24}=2 223224=2,即增加的是2,也就是中间的从该数增1的整数不能正确表示。

综上所述,我们可以知道不能精确表示的最小正整数是$2^

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值