计算机组成原理第二章——数据的表示与运算(下)

本文深入探讨浮点数的表示,包括浮点数的作用、IEEE754标准和浮点数的加减运算。介绍了浮点数规格化的重要性,左规和右规的操作细节,以及浮点数的范围和补码表示。还涵盖了IEEE754中移码的概念及其在浮点数表示中的应用。
摘要由CSDN通过智能技术生成

提示:时光清浅处 一步一安然


前言

本节主要讲三个问题,浮点数的表示,IEEE 754标准,浮点数的加减运算

2.3.1 浮点数的表示

浮点数的作用和基本原理
定点数可表示的数字范围有限,并且我们不能无限制地增加数据的长度
将一个数值用阶码和尾数来表示,这样表示的数值的范围就大大增加了,
定点数是指小数点的位置是不变的,而浮点数则是小数点的位置会发生变化,小数点移动多少是看我们的阶码的大小,
原码是关于原点对称,而浮点数的尾数部分通常都是使用原码来确定的,故浮点数的范围也是关于原点对称

请添加图片描述
这个阶码的底也可能是2,4,8八进制,但是绝大多数都是2进制,
请添加图片描述
请添加图片描述
浮点数规格化
尾数的最高位是无效位会丧失精度,规定尾数的最高数值位必须是一个有效值
尾数的位数决定浮点数的有效数位,有效数位越多,数据的精度越高。为了在浮点数运算过程中尽可能多地保留有效数字的位数,使有效数字尽量占满尾数数位,必须在运算过程中对浮点数进行规格化操作。所谓规格化操作,是指通过调整一个非规格化浮点数的尾数和阶码的大小,使非零的浮点数在尾数的最高数位上保证是一个有效值
左规:当运算结果的尾数的最高数位不是有效位,即出现±0.0…0×…×的形式时,需要进行左规。左规时,尾数每左移一位、阶码减1(基数为2时),直至尾数变成规格化形式为止。左规可能要进行多次(但是宝呀,负数且补码表示的时候,最高位数值位需要为0的呦)。
右规:当运算结果的尾数的有效位进到小数点前面时,需要进行右规。将尾数右移一位、阶码加1(基数为2时)。需要右归时,只需进行一次
请添加图片描述
左规:当浮点数运算的结果为非规格化时要进行规格化处理,将尾数算数左移一位,阶码减一
右规:当浮点数运算的结果尾数出现溢出,(双符号位为01或10,双符号位中的更高位表示我们当前数值的正负性)时,将尾数算数右移一位,同时阶码加一,新空出的位置与与双符号位保持一致,这里也就是零,最后阶码加一
采用双符号位,当溢出发生时候,可以挽救,更高的符号位是正确的符号位

请添加图片描述
浮点数的表示范围
这里要注意用补码表示的负数的尾数,我们为了计算机处理起来方便,也就是当符号位为0的时候 数值位为1 当符号位为1的时候数值位为0,如下图右下的例题,你发现1.1110100并不满足符号位与最高位是相反的 所以需要移位,我们知道负数的补码是左边是补1的,并且规格化是需最高位为0的,所以也就需要算数左移三位,此时阶码值就要减3
运算结果大于最大正数时称为正上溢,小于绝对值最大负数时称为负上溢,正上溢和负上溢统称上溢。数据一旦产生上溢,计算机必须中断运算操作,进行溢出处理。当运算结果在0至最小正数之间时称为正下溢,在0至绝对值最小负数之间时称为负下溢,正下溢和负下溢统称下溢。数据下溢时,浮点数值趋于零,计算机仅将其当作机器零处理。所以下溢并不进行中断处理
请添加图片描述
补码表示中符号位与数值位是不同的,这样方便计算机判断是否已经进行了规格化,
补码的负数中,就像之前我们学的整数的补码一样,其中因为0只有一个补码形式,我们就将10*00,表示最小的-128一样,所以这里也是一样的道理,也是用全零来表示这个最小的数,最大的数用用补码来求原码就是取反末尾加一就是1.10001,所表示的就是1/2+2-n,并且为了方便大家记忆,这里大家记住和之前一样补码是不对称的,多个一个数是最小的一个数
知识点回顾
请添加图片描述

2.3.2 IEEE754

移码
我们上面说过阶码可以使用移码或者补码来,尾数也可以使用原码或者补码来表示,但是某些标准中做了具体的规定,IEEE 754 标准的浮点数(除临时浮点数外),是尾数用采取隐藏位策略的原码表示,且阶码用移码表示的浮点数。对于规格化的二进制浮点数,数值的最高位总是“1"(因为这里尾数是使用原码,自然规格下是1)为了能使尾数多表示一位有效位,将这个“1”隐藏,称为隐藏位,因此23位尾数实际上表示了24位有效数字。例如,(12)D=(1100)B,将它规格化后结果为1.1×23,其中整数部分的“1”将不存储在23位尾数内。短浮点微与长浮点数都采用隐藏尾数最高数位的方法,因此可多表示一位尾数.注意移码只能用于表示整数,EEE 754标准中浮点数在阶码不为0时隐藏尾数的最高位的1,
移码的定义:移码=真值+偏置值,此处8位移码的偏置值=128d=1000 0000B 偏置值一般取128D 此时移码=补码符号位取反,IEEEE754取的偏置值127时,此时对于真值-128=1000 0000B 移码=-1000 0000 +0111 1111=1111 1111(这里的计算时是发现被减数比减数要小,由于我们移码只有8bit,所以背后的这些加减运算都会进行mod2的8次方,我们可以在原有的基础上加上模2的8次方,然后再减 此时得到的移码便是1111 1111)
请添加图片描述
这里全0 与全1 有其他用处,下文会解释
请添加图片描述
并且偏置值取2n-1相对于2n-1-1次方是相当于循环移动一个位置的
IEEE754
这个表格需要记住,并且在计算时,可以将这个移码看成一个无符号数,然后用之前的计算方式 比如下图double中的蓝色部分的,可以看成无符号数128(移码)-1023(偏移量),因为移码是可以表示正负的,所以不需要阶符,这里只需要一个数符便可,

请添加图片描述
这里可以将其转化成对应的十进制相加减,比如0111 1111(127)-1结果也就是126 用八位表示,并且要将其看成是无符号数,所以表达的方式就是0111 1110,尾数部分的个数是需要进行拼凑的,一共凑成32位即可
请添加图片描述
并且虽然尾数只有23位但是因为我们隐含了一位最高位,所以其实的24位。并且因为阶码使用的是补码中全零和全一被作为它用,所以表示的范围是-126~ 127之间.
请添加图片描述
这里计算真值的时候,可以将移码也看成是十进制,然后减去偏移量得到阶码的真值,
数值范围
之前我们说过==-128(全1) -127(全0)有其他用处 所以这里阶码的最小值时-126,所以范围如下,注意其隐藏位要加一==
请添加图片描述
(通过猜测,我们可能想到全0可能对应的是下溢出的情况,此时表示一种最小值,但是最小值可能是两种情况,一种是不能进行规格化,一种是,即它的尾数实在是太小,即使阶码最小也不能表示,那么我们就不进行规格化了,用阶码全零,并且此时对应的阶码就是-126,并且也不含隐含的有效位1了,并且因为暗含了一个1 ,所以即使全零,表示的也不是0,所以为了将这个隐含的1 去掉自然也就是阶码全0,若是此时尾数再全部为0.自然就是真值0了,自然全1表示的就是上溢,正负上需要区别吗?自然是不需要的,因为有一个数符位呀)
请添加图片描述
无论是上溢还是非法运算都会引起中断。
并且需要注意尽管阶码全零对应的移码是-127 但是这里的非规格小数后面乘的阶码是-126.

2.2.3 浮点数的运算

本节主要讲的是浮点数的加减法运算,以及浮点数定点数之间的强制类型转换
小阶向大阶靠齐是为了计算机内部硬件的实现方便,另外也是为了降低误差,高位的数对误差结果的影响更大

请添加图片描述
尾数溢出我们可以通过看它的两个符号位是否相同 相同则没有越界,如下图中的11 就没有越界,
如下面这题我们还有第零步,需要转化成真值的形式,然后这里首先将 -101转换成补码的形式,也就是1011(取反加一)然后这里题目要求阶符取两位,所以这里需要双符号位,也就是11011 ,接下来来看尾数-0.101,他所对应的原码是1.101 他的补码是1.011,同样的需要两个符号位,所以这里也就是11.011 然后根据题目所说尾数取9位,进行扩展即可,将阶码以及尾数部分拼接起来便可得到x
(下面这题中因为没有用移码,所以无论是数符位还是阶符位都是需要表示的,并且这里也没有隐藏高位1什么的,所以要转化成只包含尾数的形式,并且注意数符位的位置)
请添加图片描述
这里对阶求阶差,本来是减法,但是计算机中只有加法,所以将后面改成负数的补码 也就是全部位取反,在加一便可,然后再将得到的结果转化成原码,两个符号位不变,其余位取反加一便可这里也就是-1,下一步尾数相减 同样的道理也是减数取负数的补码形式,这里发现双符号位发生了变化也就是尾数发生了溢出,这里就需要尾数右移 然后阶码加一,此时就完成了规格化,判溢出的方法是阶码加一,判断两个阶符是否相同,相同则没有溢出
请添加图片描述
并且注意这里右移,阶码值加一,这里就是在补码的基础上直接加一的,并且规格化的时候补码的符号位与第一位的数值位是相反的,
舍入问题
除了右规的时候会面临舍入的问题,有的计算机可能会浮点数的尾数部分单独拆出来计算24bit->32bit 算完结果在经过舍入32bit->24bit再拼回浮点数,发生下溢我们直接将其当成机器数零便可,若是发生上溢则需要中断处理,上溢出是我们必须要处理的错误
请添加图片描述
注意使用0舍1入法的时候,可能是需要进行多次右规,并不是向前文中说的一样,右规只进行一次。
请添加图片描述

本节回顾
请添加图片描述

思维导图

这个思维导图引用于其他博主,博主传送带
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值