挑战408——组成原理(6)——浮点数及其加减运算

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/redRnt/article/details/83278362

相对于定点数,浮点数就是小数点可以浮动的数。通常用来表示数值范围相差很大的数(比如太阳的质量跟电子的质量相差)。
通常我们使用这样的表达式来表示浮点数:
在这里插入图片描述
其中,r表示底(因为是指数的形式,一般取2的n次方),E表示阶码(阶码可正可负)。M为位数(可正可负)。
当r = 10的时候,就是我们熟悉的科学计数法。在计算机中我们研究的是r = 2的时候。

规格化数与浮点数的规格化

为了提高数据的精确度以及便于比较浮点数的大小,在计算机中规定浮点数的尾数用纯小数表示。其中尾数最高位为1的浮点数称为规格化数。比如 N = 0.110101 X 2^10.尾数的最高位为1.所以称为规格化数。
为了提高浮点数的精确度,要求其尾数必须为规格化数,如果不是规格化数,那么就要修改阶码的值并同时左右移尾数的方法,使其变为规格化数。
根据尾数的移动位置,我们将规格化分为左规和右规(待会详细说)。我们先来看看一个十进制数的移动:
在这里插入图片描述
二进制的移动也是如此的。
因此我们得到这样的结论:
在这里插入图片描述
从图中我们可以看出至少这几点:

  1. 对于原码而言,其规格化数的最高位一定是1
  2. 对于补码而言,其规格化数的最高位一定与符号位相反
  3. 对于正数,无论其是原码还是补码,规格化后的形式一样
  4. 对于负数,补码的规格化数是原码规格化数的除了规格化位以外的全部取反

IEEE754标准

现代计算机的浮点数一般采用IEEE定制的国际标准,这种标准形式如下:
在这里插入图片描述
根据浮点数的位数的不同,常见的浮点数有三种,短浮点数(float),长浮点数(double),临时浮点数。具体形式如下:

在这里插入图片描述
考试中,最常出现的当属短浮点数了,因为长浮点数位数较多且原理与短浮点数一致。

  1. 最高位为符号位,占用一位的空间
  2. 阶码为8位,以移码的方式存储,阶码表示的范围为[1 ~ (2^8) - 1],为什么不是0-255?因为全0用来表示无穷大,全0表示非规格化数
  3. 尾数数值位为23位,在这里采用了隐藏位策略,由于我们规定了尾数最高位为1,也就是说数值位的第一位总会是1,所以我们可以采用23位来表示24位的数(我们把最高位的数值位隐藏了起来)。即不在23位数值位中存储这个1(这部分内容经常!!
  4. 偏置值,对于float数而言,偏置值为127((2^7) - 1,其中,全一表示无穷大,至于为什么是7次方不是8次方,回顾移码的定义),表示阶码的移动。在存储浮点数阶码之前,要将偏置值加到阶码的真值上。比如阶码为3,那么移码表示的阶码为:
    127 + 3 = 130(80H)。

所以,规格化后,float数的真值为:
在这里插入图片描述
其中 s = 0代表正数,s = 1 代表负数。由我们刚刚讨论出来的各个字段的范围可以得到float浮点数的表示范围
显然,当E = 1,M= 0 的时候,浮点数最小,
当 E = 254, M = 111111…(23个1).的时候,浮点数最大

在这里插入图片描述

浮点数的加减运算

同定点数相同,浮点数的加减也采用补码的形式运算,不同的是,浮点数运算的过程较为麻烦。

  1. 对阶
    即小数点的位置对齐,此时两个浮点数的阶码相等。因此我们首先得得出两个浮点数相差几阶。由小阶转向大阶,具体操作是将数值部分右移一位, 此时阶码 +1。(这里面隐含着舍弃掉有效位的风险)
  2. 尾数求和
    对阶后就好办了,对阶完相当于小数点位置确定,直接进行定点数的加减。
  3. 规格化
    规格化,浮点数的规格化通常采用双符号位,前面我们已经说过双符号位这个概念了。
    在这里插入图片描述
  4. 舍入
    在对阶和右规的过程中,尾数的低位有效位位很可能移丢(因为是小转大),这时候就会影响精度产生误差(注意,产生误差≠结果错误)。这样的溢出我们称为尾数溢出。因此必须对尾数进行舍入。常用的方法有:
    恒置“1”法:无论右移舍去的是谁,都在末尾添加1
    舍“0”入“1”法:右移过程中,尾数是0则舍去,是1,则尾数末尾加1.(存在尾数再次溢出的风险)
  5. 溢出判断
    判断浮点数的溢出,我们采用双符号法,但是与定点数有一点不同:当尾数之和出现01.XXXXXX或者10.XXXXXX的时候,并不能直接下结论溢出,应当再右规一次,才能判断是否真的溢出,且规后发现其阶码的符号位出现01或者10的时候,说明溢出

浮点数的加减运算(实例)

下面是一道2009年的408的考试真题:
在这里插入图片描述
我们先看看,首先第一步没得说,先写出X和Y的二进制表示,注意含有两个符号位:
在这里插入图片描述
在这里插入图片描述
然后按步骤做题:
在这里插入图片描述
这一步我们发现这个时候X和Y的阶码已经相同(00,111)了。
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/redRnt/article/details/83278362