首页 > 编程知识 正文

浮点计算机中对浮点数表示采用规格化,计算机中数的浮点表示方法

时间:2023-05-03 06:42:21 阅读:214636 作者:2598

(2021-04-07增加:八进制、十六进制浮点数-规格化数判断,文章链接:https://blog.csdn.net/m0_56032189/article/details/115326357?spm=1001.2014.3001.5501)

不喜欢看文字的同学,可以直接去b站看下西安电子科技大学车向泉老师的讲解就明白了。
链接如下:https://www.bilibili.com/video/BV1nt411q7rg?p=9;

注:对初学计算机原理的同学来说,这个浮点数判断的问题不易搞清楚,根本原因在于各大教材和教辅未给我们讲清楚!
大部分教材或教辅给出的R进制规格化浮点数判断的条件为:
1/R≤|M|≤1,(M表示尾数,包含符号位与数值位)
却未对以上不等式做详细的解释说明。

以下为正文
提前说下浮点数规格化表示形式的原理:
在充分利用尾数有效位的基础上,表示格式统一,便于硬件设计。

对于二进制(R=2)补码而言,以上不等式应拆分为如下两个情况:
1、正数(|M|=M)
1/2≤M<1(注意:右边无等号)
对应补码规格化形式:0.1xxxx
最小值为0.10000,最大值为0.11111
2、负数(|M|=-M)
-1≤M<-1/2(注意:右边无等号)
对应补码规格化形式:1.0xxxx
最小值为1.00000,最大值为1.01111
经过上面两种情况说明,我们发现1/R≤|M|≤1不等式中的左右等号不是在正数和负数时都成立的,如果我们不管正负数,直接按这个不等式判定浮点数是否规格化就会出错。

有兴趣的可以接着往下看,为什么正负数时,右边的等号不取。
1、正数
定点小数补码无法表示+1(且+1非纯小数),故右边不可取等号。
2、负数
看到这里,聪明的你肯定想说-1也不是纯小数,为什么就取等号了?
-1/2是纯小数,怎么又不取等号了?
原因在于这是人为规定的,目的在于格式统一,便于硬件层进行最简单的电路设计,就能让计算机分辨出浮点数是否是规格化的。
[-1]补=1.00000(格式同1.0xxxx)
(这个等式是人为另外规定的,不是根据二进制转换为十进制得出的,这点要注意;与定点整数不同,定点整数的[-1]补=111111,是可以通过二进制转换为十进制得出的,不是人为另外规定的)
[-1/2]补=1.10000(格式与1.0xxxx不同)
而-1/2至-1之间的定点小数,其补码均满足1.0xxxx格式,
故为了格式统一,便于硬件设计,且定点小数能多表示一位-1,故人为规定,1.10000(-1/2)不看做是规格化数,而把1.00000(-1)看做是规格化数。

这样,补码表示的浮点数是否规格化,在硬件层面只需用1个简单的异或逻辑电路便可以判断了。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。