(计算机组成原理)第二章数据的表示和运算-第三节1:浮点数的表示

Posted 快乐江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(计算机组成原理)第二章数据的表示和运算-第三节1:浮点数的表示相关的知识,希望对你有一定的参考价值。

浮点表示法是指以适当的方式将比例因子表示在数据中,让小数点的位置根据需要而浮动
这样,在位数有限的情况下,即扩大了数的表示范围,又保持了数的有效进度。例如,用定点数表示电子的质量( 9 × 1 0 − 28 g 9×10^{-28}g 9×1028g)或太阳的质量( 2 × 3 33 g 2×3^{33}g 2×333g)是非常不方便的

一:浮点数的表示格式

在小学学习科学计数时,我们知道对于: + 302657264526 +302657264526 +302657264526这么长的数字可以用科学计数法表示为:
+ 3.026 × 1 0 11 +3.026×10^{11} +3.026×1011

而浮点数的表示格式与科学计数法有异曲同工之妙

  • 阶码:反映浮点数的表示范围及小数点的实际位置
  • 尾数:其数值部分的位数 n n n反映了浮点数的精度
    因此,通常浮点数表示为:
    N = r E × M N=r^{E}×M N=rE×M

其中 r r r是浮点数阶码的底(隐含),与尾数的基数相同(二进制中 r = 2 r=2 r=2),E是阶码,是一个常用补码或移码表示的定点整数,M是尾数,是一个常用原码或补码表示的定点小数

因此,这种格式可以这样理解:尾数给出了一个小数(数符指明其正负性),同时阶码指明了小数点要向前(阶符为负)还是向后(阶符为正)移动几位


c a s e 1 : case1: case1:例如浮点数a的阶码(补码)为 0 , 01 0,01 0,01,尾数(补码)为 1.1001 1.1001 1.1001,空间中存储的方式就是下面这样的

a的阶码对应的真值为+1,尾数对应的真值为=-( 2 − 2 + 2 − 3 + 2 − 4 2^{-2}+2^{-3}+2^{-4} 22+23+24)=- 0.0111 0.0111 0.0111,则a的真值为: 2 1 × ( − 0.0111 ) = − 0.111 2^{1}×(-0.0111)=-0.111 21×(0.0111)=0.111

c a s e 2 case2 case2:例如b的阶码(补码)为 0 , 10 0,10 0,10,尾数(补码)为 0.01001 0.01001 0.01001,空间存储如下

  • 上述后面1被抛弃了,精度丢失

b的阶码对应真值为+2,尾数对应真值为 + ( 2 − 2 + 2 5 ) = + 0.01001 +(2^{-2}+2^{5})=+0.01001 +(22+25)=+0.01001,因此b的真值为: 2 2 × ( + 0.01001 ) = + 1.001 2^{2}×(+0.01001)=+1.001 22×(+0.01001)=+1.001

二:浮点数尾数的规格化

(1)左规和右规

可以看到,上面的 c a s e 2 case 2 case2中,由于尾数位数不够,因此最后一位1丢失,导致该种表示方法下的浮点数精度丢失。就像我们在学习科学计数法的时候要求过的一样,尽量保证不要超炫 0.003 × 1 0 13 0.003×10^{13} 0.003×1013这样的形式出现,必须保证最高位是一个有效位,因为无效的0不但不会增加精度,反而会占用位数。

因此为了提高运算的精度,需要充分利用尾数的有效数位,通常采取浮点数规格化形式,即规定尾数的最高数位必须是一个有效值。非规格化浮点数需要进行规格化操作才能变成规格化浮点数。所谓规格化操作,是指通过调整一个非规划浮点数的尾数和阶码的大小,使非零的浮点数在尾数的最高位上保证是一个有效值。

规格化方法主要有两种

  • 左规将尾数算数左移一位,阶码就减1(基数为2),左规可能要进行多次

  • 右规:当浮点数运算的结果尾数出现溢出(双符号位为01或10)时,将尾数算数右移一位,阶码加1(基数为2时) 的方法称为右规,右规只需进行一次。

下面是一个需要右规的例子

(2)规格化浮点数的特点

规格化浮点数的尾数 M M M的绝对值应该满足 1 r ≤ ∣ M ∣ ≤ 1 \\frac{1}{r} \\leq |M| \\leq 1 r1M1,若 r r r为2,则有 1 2 ≤ ∣ M ∣ ≤ 1 \\frac{1}{2} \\leq |M| \\leq 1 21M1。规格化表示的尾数形式如下

1:原码规格化后

规格化的原码尾数,最高数值位一定是1

  • 正数:形式为0.1××...×,其最大值表示为0.111...1,最小值表示为0.100...0,尾数的表示范围为 1 2 ≤ M ≤ ( 1 − 2 − n ) \\frac{1}{2} \\leq M \\leq (1-2^{-n}) 21M(12n)
  • 负数:形式为1.1××...×,其最大值表示为1.10×××0,最小值表示为1.111...1,尾数的表示范围为 − 1 2 ≥ M ≥ − ( 1 − 2 − n ) -\\frac{1}{2} \\geq M \\geq -(1-2^{-n}) 21M(12n)

2:补码规格化后

规格化的补码尾数,符号位与最高数值位一定相反

  • 正数:形式为0.1××...×,其最大值表示为0.111...1,最小值表示为0.100...0,尾数的表示范围为 1 2 ≤ M ≤ ( 1 − 2 − n ) \\frac{1}{2} \\leq M \\leq (1-2^{-n}) 21M(12n)
  • 负数:形式为1.0××...×,其最大值表示为1.01×××1,最小值表示为1.00...0,尾数的表示范围为 − 1 ≤ M ≤ − ( 1 2 + 2 − n ) -1 \\leq M \\leq -(\\frac{1}{2}+2^{-n}) 1M(21+2n)

c a s e 3 : case3: case3若某浮点数的阶码,尾数用补码表示,共4+8位:0.110;1.1110100,问如何规格化?

答:在这个例子中,阶数为+6,前面说过我们规定规格化的补码尾数的负数形式一定为1.0××...×,因此可以将1.1110100算数左移三位(补码的算数左移是低位补0,算数右移是高位补1),结果为1.010000,阶码变为+3。

三:浮点数表示范围(408考试大纲已删除)

如下图所示,运算结果大于最大正数时称为正上溢,小于绝对值最大负数时称为负上溢,正上溢和负上溢统称为上溢。数据一旦产生上溢,计算机必须进行中断操作,进行溢出处理

当运算结果在0到最小正数之间时称为正下溢,在0到绝对值最小负数之间时称为负下溢,正下溢和负下溢统称为下溢,数据下溢时,浮点数区域0,计算机仅将其当做机器零处理

以上是关于(计算机组成原理)第二章数据的表示和运算-第三节1:浮点数的表示的主要内容,如果未能解决你的问题,请参考以下文章

(计算机组成原理)第二章数据的表示和运算-第三节3:浮点数加减运算

(计算机组成原理)第二章数据的表示和运算-第一节5:本章习题

计算机组成原理 王道考研2021 第二章:数据的表示和运算 -- 浮点数的表示和IEEE754标准

(计算机组成原理)第二章数据的表示和运算-第二节1:定点数的表示(原码反码补码和移码)

(计算机组成原理)第二章数据的表示和运算-第二节4:定点数的加减运算和溢出判断

计算机组成原理 王道考研2021 第二章:数据的表示和运算 -- 定点数的运算(移位加减运算溢出判断符号扩展)