计算机组成原理:浮点数的加、减、乘、除运算(含实例完整运算)

目录

浮点数的加减运算

零操作数的判断

对阶操作

尾数的加减操作

尾数的规格化

 结果的舍入处理

 结果的溢出判断

加减实例运算过程

浮点数的乘除法

零操作数的检查

阶码的加减操作

尾数的乘除操作

结果的规格化、舍入处理及溢出的判断

具体的操作如下图

 乘除实例运算过程


浮点数的加减运算

 零操作数的判断

一个操作数为零,也不必计算,节省时间

  • 若加数或被加数其中有 0,则等于其中不为0 的那个数;若全为 0 则等于 0
  • 若被减数为 0,则等于减数的相反数 ;若减数为 0,则等于被减数 ,若全为0则等于0

对阶操作

  • 以阶码加大(绝对值)的为标准,阶码较小的   向较大的对齐

  •  目的:计算机中的浮点数定点表示时小数点的位置是固定的,在小数的数值位的最前面,为了避免阶码较大的浮点数尾数左移导致最高位的丢失

 如x 的阶码为 Ex=010,y的阶码Ey=100,则Ex-Ey =-2,则x 右移两位,阶码加2,这时x 和y 的阶码都是100,这个过程就是对阶

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkDlk6blubTphbE,size_20,color_FFFFFF,t_70,g_se,x_16

尾数的加减操作

双符号位的补码形式进行运算,方便判断溢出的情况

其中若符号位的最高位还有进位则直接舍弃,因为机器的位数是有限制的

尾数的规格化

  • 尾数的符号位为 01 或 10的情况,则进行右规,阶码加一,将符号位变成 00 或 11 ,其中符号位的新数继承前一位符号位
  • 尾数下溢时,进行舍入处理

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkDlk6blubTphbE,size_20,color_FFFFFF,t_70,g_se,x_16

 结果的舍入处理

在对阶或者右规操作时,尾数的低位会移出,影响精度,因此要进行舍入处理

  • 0 舍 1 入法:若低位是 0 ,则直接舍弃,若低位是1 ,则尾数加 1 
  • 恒置 1 法:无论地位是什么,最低位恒置为 1
  • 第一种方法精度较高,但需要记录移出的值;第二种方法精度较低,但方便,适合用来制作运算器

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkDlk6blubTphbE,size_20,color_FFFFFF,t_70,g_se,x_16

 结果的溢出判断

  • 尾数溢出,在规格化时右规处理或者是舍入处理
  • 阶码上溢时,置上溢标志
  • 阶码下溢时,置为机器数 0

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkDlk6blubTphbE,size_20,color_FFFFFF,t_70,g_se,x_16

加减实例运算过程

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkDlk6blubTphbE,size_20,color_FFFFFF,t_70,g_se,x_16

注意:求得的都是补码,要转化为原码的形式,才是真实的结果值

浮点数的乘除法

零操作数的检查

若有零,则直接可得结果为零

阶码的加减操作

  • 以补码或移码的形式,进行加减
  • 若为乘法,则两者相加
  • 若为除法,则被除数的阶码减除数的阶码

尾数的乘除操作

定点数的乘除操作

具体操作戳这里👇

定点数的乘除运算法则(含实例运算过程)

结果的规格化、舍入处理及溢出的判断

同上面加减的操作

具体的操作如下图

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkDlk6blubTphbE,size_20,color_FFFFFF,t_70,g_se,x_16

 乘除实例运算过程

  • 乘法

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkDlk6blubTphbE,size_20,color_FFFFFF,t_70,g_se,x_16

  • 除法 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkDlk6blubTphbE,size_20,color_FFFFFF,t_70,g_se,x_16

关于双符号位的补充请见
https://blog.csdn.net/m0_51783792/article/details/123985218https://blog.csdn.net/m0_51783792/article/details/123985218

  • 80
    点赞
  • 577
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
1. 首先,需要明确程序的输入和输出。在这个例子中,输入是两个数字和一个运算符号,输出是运算结果。因此,我们需要在程序中添输入语句和输出语句。 2. 接下来,需要添程序的逻辑部分,即根据输入的运算符号进行相应的运算。可以使用 if-else 语句来实现。 3. 首先,需要判断输入的运算符号是、乘、除还是求余。根据不同的运算符号,进行相应的计算,并输出结果。 4. 如果输入的运算符号不是、乘、除或求余,则输出错误信息,提示用户重新输入。 5. 最后,需要考虑程序的健壮性,即输入的数字是否为合法数字,例如,输入的数字是否为整数或浮点数,是否为0等问题。可以使用 try-except 语句来处理异常情况。 6. 完成程序的编写后,需要进行测试,检查程序是否能够正确地进行、乘、除、求余等运算,以及异常情况是否得到了正确的处理。 以下是完整的设计流程: 1. 输入两个数字和一个运算符号。 2. 判断输入的运算符号是、乘、除还是求余。 3. 根据不同的运算符号,进行相应的计算。 4. 输出计算结果。 5. 如果输入的运算符号不是、乘、除或求余,则输出错误信息,提示用户重新输入。 6. 如果输入的数字不是合法数字,例如,输入的数字是否为整数或浮点数,是否为0等问题,则输出错误信息,提示用户重新输入。 7. 进行测试,检查程序是否能够正确地进行、乘、除、求余等运算,以及异常情况是否得到了正确的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值