3.5浮点运算

  • 规格化数:若一个用科学计数法表示的数,没有前导零,且小数点左边只有一位整数,则称为规格化数。如1.22*10^9。
  • 规格化数的优点:
    • 简化了浮点数的数据交换;
    • 简化了浮点算术算法
    • 提高了用一个字存储数的精度。

3.5.1浮点表示

  • 尾数:位于浮点数的尾数字段,其值在0~1之间。
  • 指数:位于浮点数的指数字段,表示小数点的位置。
  • 浮点表示的设计者必须在尾数位宽和指数位宽之间做出合适的折中。因为字的长度是固定的。
    MIPS中浮点表示如下:
    s为符号位(1为负数),指数域为8位宽(包含符号位),尾数域为23位宽。这种表示方法称为符号数值表示(sign and magnitude)【计算机组成与设计】3.5~3.6浮点运算、并行性和计算机算术:子自并行
  • 浮点数表示范围 2.0101038 ~ 2.0101038
  • 溢出(上溢):正的指数太大导致在指数域放不下。
  • 下溢。
  • 精度

    • 双精度:浮点数由2个32位的字表示。
    • 单精度:浮点数由一个32位的字表示。

    双精度浮点表示(MIPS):表示范围2.01010308 ~ 2.01010308
    【计算机组成与设计】3.5~3.6浮点运算、并行性和计算机算术:子自并行

    • IEE754标准
      就是说,上述方法表示的二进制浮点数,小数点左侧的数字一定是1,所以将二进制浮点数表示的前导位1直接省略,用来提高精度。
      所以这样就表示成了
      1s(1+F)2E
      F表示0和1之间的数,E表示指数域的值。IEEE754标准的另一些特点就是用特殊的符号来表示异常事件。列如,用 +∞或者- ∞表示除零中断。最大的指数保留下来表示那些特殊符号。
      【计算机组成与设计】3.5~3.6浮点运算、并行性和计算机算术:子自并行
      由于这种符号数值表示方法将符号位放在最前,所以作比较的时候就很容易了,先比较符号位,如果相同在比较指数位,但指数位有一个问题,由于用的是补码,如果是负数,那么它最前面的数字是1,这就不好玩了,本来是负数,结果搞得他好像很大似的。所以我们要找一种办法,使得这种比较简单一点。没错这种方法就是带偏阶的记数法。需要从偏阶中减掉偏阶才能获得真实值。
  • IEEE754标准规定单精度的偏阶为127。这样-1就可以表示为-1+127,就是12610,即011111102。-10就是11710011101012,这样就很完美了,只要比较每一位上的数字大小就可以知道整个数值的大小关系了。

3.5.2浮点加法

直接用流程图表示:
【计算机组成与设计】3.5~3.6浮点运算、并行性和计算机算术:子自并行
- 第一步当中应该是将数的尾数部分右移,这样尾数就会减小,为了保证数字正确,指数部分必须增大,这样就刚好达到我们的目的。
- 第四步,判断是否是规格化数,这是因为对尾数进行四舍五入的时候,可能发生不测,进而需要再次规格化。
硬件加的结构示意图:
【计算机组成与设计】3.5~3.6浮点运算、并行性和计算机算术:子自并行

3.5.3浮点乘法

流程图如下:
【计算机组成与设计】3.5~3.6浮点运算、并行性和计算机算术:子自并行
第一步中要减去一个偏阶值,是因为当两个指数相加时,偏阶值加了两次。
其他步骤和加法相似,第五步,符号要根据两个源操作数来确定,同号为正,异号为负。

3.5.4MIPS中的浮点指令

MIPS有如下指令来支持IEEE754标准:
浮点单精度加(add.s)和双精度加(add.d)。
浮点单精度减(sub.s)和双精度减(sub.d)。
浮点单精度乘(mul.s)和双精度乘(mul.d)。
浮点单精度除(div.s)和双精度除(div.d)。
浮点单精度比较(c.x.s)和双精度比较(c.x.d)。
其中x指的是,等于(eq),不等于(neq),小于(lt),小于等于(le),大于(gt),大于等于(ge)。

  • 浮点比较为真跳转(bclt)和浮点比较为家跳转(bclt)。
    MIPS增设了单独的浮点寄存器:$f0, $f1,$f2………。
    浮点存取指令:lwc1,swc1。
    双精度寄存器是一组单精度寄存器的偶数-奇数对,并使用偶数寄存器作为名称,列如,单精度 \$f2和 \$f3作为双精度\$f2。
    关于上述的比较和跳转指令给出如下例子和解释:
    【计算机组成与设计】3.5~3.6浮点运算、并行性和计算机算术:子自并行

3.5.5算法精确性

  • IEEE754在计算中间值的时候,会在右边多保留2位,分别称为保护位和舍入位。
  • 保护位:在浮点计算中,右边多保留的两位中的第一位。
  • 舍入位:在浮点计算中,右边多保留的两位中的第二位。

就是说比起规格化数的话,他会在右边多出两位,以提高最终结果的精度。

3.6并行性和计算机算术:子字并行

相关文章:

  • 2021-09-19
  • 2021-10-03
  • 2021-05-20
  • 2022-12-23
  • 2021-04-28
  • 2021-06-23
  • 2022-12-23
猜你喜欢
  • 2021-11-11
  • 2021-05-13
  • 2021-11-21
  • 2022-12-23
  • 2022-01-31
  • 2021-07-31
  • 2021-09-25
相关资源
相似解决方案