规格化又叫做规格化数,是一种表示浮点数的规格化的表示方法,还可以通过修改阶码并同时移动尾数的方法使其满足这种规范。有关“怎么判断是不是规格化数 如何将浮点数规格化”的话题,以下是详细介绍。

 

一、怎么判断是不是规格化数

 

1、原码表示的尾数判断浮点数是否规格化:第一个数值位是否为“1”就是规格化数,否则非规格化数;

 

2、补码表示的尾数判断浮点数是否规格化:符号位与第一个数值位是否相异,如果是则为规格化数,否则非规格化数(-1/2除外)。

 

规格化数就是用来表示浮点数小数部分的,因为要求小数点后的第一位不为零,所以肯定是0.1xxx这样的东西。然后数码为0时是正数,这个0和小数点后第一位的1是相异的。数码位1时是负数,取补码的时候这个小数点后第一位的1也就变成0了,然后这个1和小数点后第一位的0也是相异的。

 

怎么判断是不是规格化数 如何将浮点数规格化

(图片来源于互联网)

 

2.如何将浮点数规格化

 

浮点数的规格化形式:浮点数都是近似表示的,精度由尾数决定,数的表示范围大小由R、E决定。为了提高精度需要使尾数的有效位数尽可能占满可用的位数。这种措施称为浮点数的规格化。规格化要求尾数:1/R<=|M|<1;

 

R=2时:0.5<=|M|<1 即2^(-1)<=|M|<2^0,(0.1)2<=|M|<(1)2。

 

将一个浮点数转换为规格化的过程,称为浮点数规格化。右规:尾数右移一位,阶码+1左规:尾数左移一位,阶码-1

 

注:隐藏位,对于规格化浮点数小数点后第一个值是固定的(正数:1,负数:原码1,补码0),所以该位往往缺省,称为隐藏位。

 

例:用格式2,共32位,数符1位,阶码8位用移码,其余位为尾数。规格化0.1101 0001×2^10110(其中指数为二进制数)

数符:+ 0

阶码:10110 0001 0110 0001 0110 1001 0110

尾数:1101 0001 1010 0010 0…0

所以0.1101 0001×2^10110(指数为二进制数)规格化结果:0 1001 0110 1010 0010 0…0

 

怎么判断是不是规格化数 如何将浮点数规格化

(图片来源于互联网)

 

3.规格化数的原理

 

若不对浮点数的表示作出明确规定,同一个浮点数的表示就不是唯一的。例如,十进制数可以表示成1.11×1000.111×101,0.0111×102等多种形式。为了提高数据的表示精度,当尾数得值不为0时,尾数域的最高有效位应为1,这称为浮点数的规格化表示。否则以修改阶码同时左右移小数点位置的办法,使其变为规格化数的形式。但在IEEE754标准中,一个规格化的32位浮点数x的真值(-1)S×(1.M)×2(E-127) e=E-127 其中S是浮点数的符号位,占1位。M是尾数,放在低位部分,占用23位,小数点位置放在尾数域最左(最高)有效位的右边。E是阶码,占用8位。它的尾数域所表示的值是1.M。e为实际指数。

 

因为规格化浮点数的尾数域最左位(最高有效位)总是1,故这一位经常不予存储,而认为隐藏在小数点的左边。64位的浮点数中符号位1位,阶码域11位,尾数域52位,指数偏移值是1023.因此规格化的64位浮点数x的真值为x=(-1)S×(1.M)×2(E-1023) e=E-1023 将十进制数11.375表示为754标准存储格式(就是上文提到的一种规格化浮点数的国际标准)11.375=+1011.011=+(1.011011)×23=(-1)S×(1.M)×2e可知S=0,包括隐藏位1.M=1.011011=1.011 0110 0000 0000 0000 0000 e=3E=e+127=130=011+01111111=10000010则二进制数格式为0 1000 0010 0110 1100 0000 0000 0000 0000。

 

怎么判断是不是规格化数 如何将浮点数规格化

(图片来源于互联网)