这是我参与更文挑战的第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方向舍入
溢出判断
由于阶码调整后可能会发生指数的上溢或下溢。所以我们要进行溢出判断,避免结果错误。
这期的理论内容不多,主要是实例讲解,如果大家想要更了解定义,可以自行百度或观看视频。
以上就是我对浮点数运算的一些浅见,如有不足或错误之处欢迎大家留言指正。