计算机组成原理06:浮点数运算

浮点数加减运算

之前我们提到过,浮点数具有特定的表示形式。因此,在进行浮点数的加减运算之前,需要统一浮点数的表达方式。这里我们主要对浮点数表示中的尾数M进行处理,要求0≤M<1,统一格式如下:

  • 正数表达为00.1...,其中,00表示双符号位为正数,小数部分第一位必须为1.当小数部分第一位不为1的时候,令E=E-1,并且将所有小数部分算数左移一位,直到其为1。
  • 负数表达式:11.0...,其中,11表述双符号位是负数,小数部分第一位必须是0(这是因为负数采用补码)。当小数部分第一位不为0的时候(说明原码这一位是0),进行左移规格化。

浮点数加减运算的步骤主要分为五步:对阶,求阶差,右移位阶小的尾数,尾数加减运算,溢出处理。

另外,这里没有提到右移规格化方法:令E=E+1,同时算数右移一位。

对阶

将两个浮点数的阶数调整为相等的。一般统一到阶数大的那一个。同时,统一后的阶数就是得数初始的阶数。

求阶差

求两个浮点数的阶数到底相差了多少。

右移位阶小的尾数

根据阶差对位阶小的浮点数的尾数进行算数右移操作。同时,当右移的尾数超出了最大精度,一般会进行舍入操作。常见的舍入操作有两种:

  • 假如被右移出的最低位是1,那么令新的最低位+1.
  • 假如被右移出的最低位是1,那么令新的最低位为1.

尾数加减运算

根据定点数的运算规则对尾数进行加减运算。运算完之后,一般对得数进行规格化(如果两符号位不相同的情况下。

溢出处理

尾数根据定点数的运算规则进行运算之后,可能会发生溢出。这一般是阶码的溢出,因为尾数的溢出可以由得数的规格化纠正。一般在运算过后阶码全0时,判断为发生了溢出。

实例:

/*例:X = 2^(010)*0.11011011, Y = 2^(100)*(-0.10101100),求X+Y。

[X]补 = 00 010 00.11011011
[Y]补 = 11 100 11.01010100

对阶:
Ex-Ey = 2
右移:
[Mx]补 = 00.00110111
求尾数

  00.0011011011
+ 11.01010100
-----------------
  11.1000101011

规格化:
  11.000101011
舍入(进1法):
  11.00010110
因此X+Y= 2^(011){注意右移规格化导致阶码-1}*(-0.11101010)
*/

浮点数乘除运算

浮点数乘除运算的步骤主要包括:

  • 阶码加减。乘为加,除为减。
  • 尾数乘除。

由于涉及都是定点数运算,这里不多讲述。和浮点数加减运算相同的是,参加运算的浮点数都要先规格化,得数也要进行规格化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值