计算机组成原理——浮点数的运算

824 阅读3分钟

这是我参与更文挑战的第7天,活动详情查看: 更文挑战

我们之前肯定都接触过科学计数法,它的运算步骤和我们的浮点数运算多有类似,那么让我们一起来了解在计算机中浮点数是如何运算的吧。

在计算机中浮点数的运算主要有以下五个步骤:

1. 对阶

2. 尾数运算

3. 规格化

4. 舍入处理

5. 溢出判断

设两个运算数为x和y ,方便我们下面表述。

x=0.5,y=-0.4375
计算x+y
首先我们把两个数进行浮点数规格化
x=0.5=0.100...0B=(1.00...0)*2^(-1)
y=-0.4375=-0.01110...0B=(-1.110...0)*2^(-2)

x=0 01111110 00...0
y=1 01111101 110...0

x=0(1).00...0
y=1(1).110...0

对阶

对阶可以使x和y的阶码相等,使尾数可以相加减。//是不是和我们的科学计数法一样呢?
对齐的原则是:小阶向大阶看齐,阶小的尾数右移,右移的尾数和两个阶的差的绝对值相等。
//保持两个数的阶一致,阶数为大的阶数。思想和科学计数法基本一致。

但是这里需要注意的是:浮点数的阶码是用移码来表示的,因此我们在对阶时需要用到移码的加减运算。 并且移位时符号位不参与移位,隐含的1要移到小数点右边。

下面我们通过实例来体会

通过进行判断,要对y进行对阶,把y右移一位,符号位不变,数值高位补0 得到y=1(0).(1)110...0

此时已经完成了对阶,然后我们进行下一步:

尾数相加

尾数相加实际就是原码的相加减。
我们还是来看实例
01.0000..0+10.1110.00=00.00100...000
最左边是符号位,其余都是数值位。

但是相加减后的数往往不是规格化的,这时我们就要把结果进行规格化。

规格化

所得结果为00.00100..00,数值位高位有三个0,因此应该进行左规,然后把阶码减3//左规几位就减几位,右规则加。
左规之后得到0(1).000..00
阶码为:0111 1011

规格化之后我们需要对结果进行舍入,保证精度是我们所需要的。

舍入

根据我们所需要的精度,对结果进行舍入。
舍入一般有四种模式:
就近舍入(0舍1入)
朝+无穷舍入
朝-无穷舍入
朝0方向舍入

溢出判断

由于阶码调整后可能会发生指数的上溢或下溢。所以我们要进行溢出判断,避免结果错误。

这期的理论内容不多,主要是实例讲解,如果大家想要更了解定义,可以自行百度或观看视频。

以上就是我对浮点数运算的一些浅见,如有不足或错误之处欢迎大家留言指正。