博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浮点加减运算中关于结果规格化的思考
阅读量:2084 次
发布时间:2019-04-29

本文共 1488 字,大约阅读时间需要 4 分钟。

对于两个浮点数x和y满足:

在这里插入图片描述
完成x与y的加减法有四个步骤:

  1. 0操作数检查。即检查是否有一个操作数为0,是的话直接得到结果,一般在计算机中不进行这一步。
  2. 比较阶码大小并完成对阶。要让两个浮点数的尾数能够直接相加减,它们的阶码也就是 M x 和 M y M_{x}和M_{y} MxMy必须相同,因此必须完成对阶,一般是让小阶向大阶看齐。
  3. 尾数进行加减运算。方法与定点加减运算完全一致,没有什么好说的。
  4. 结果规格化。这一步是重点,也是难点。
    要想知道怎么规格化,肯定得知道什么才是规范的表达方式。浮点数都是近似表示的,精度由尾数决定,数的表示范围大小由R、E决定。为了提高精度需要使尾数的有效位数尽可能占满可用的位数。这种措施称为浮点数的规格化。规格化要求尾数:
              1/R<=|M|<1
    计算机中R = 2,因此实际上我们计算出来得到的尾数必须属于[0.5, 1)。

在浮点数加减运算时,我们采用双符号位,因此,当计算结果为01.XXXX或者10.XXXX时,表示结果溢出,已经大于1了,因此需要规格化。

下面举个具体的例子:
m = 2 2 X 0.11011011 , n = 2 4 X ( − 0.10101100 ) m = 2^{2}X0.11011011,n = 2^{4}X(-0.10101100) m=22X0.11011011n=24X(0.10101100),求m+n。
逐步分析:

  • 0操作数检查。m和n都不为0。
  • 对阶。小阶2向大阶4对齐,所以m的阶数加2,相应地,m的尾数右移(小数点左移,尾数变小)两位: m = 2 4 X 0.00110110 ( 11 ) m = 2^{4}X0.00110110(11) m=24X0.00110110(11),而n保持不变。
  • 由于要进行补码运算,所以将m和n的尾数变成补码表示(双符号位):
    m = 2 4 X 00.00110110 ( 11 ) , n = 2 4 X 11.01010100 m = 2^{4}X00.00110110(11),n = 2^{4}X11.01010100 m=24X00.00110110(11)n=24X11.01010100,其中11.01010100=11.01010011+1(取反再加1)。接下来将尾数相加:
    在这里插入图片描述
    可以看到并未溢出,但是并不一定满足大于0.5, 我们将其转成原码很容易发现第一位为0,也就是说是小于0.5的,必须规格化,由此我们总结出要规格化的几种情形:
  • 若尾数为00.0XXX或者11.1XXX,虽然并未溢出,但是并不满足大于0.5,因此也必须要规格化,由于尾数要变大,阶码变小,即尾数左移(小数点右移),称之为向左规格化,使之最终变成00.1XXXX或者11.0XXXX。
  • 若尾数为10.XXXX或者01.XXXX表明运算结果溢出,必须使尾数变小,阶码变大,尾数右移(小数点左移),称之为向右规格化。
  • 针对例子中的情况,需要进行向左规格化,最终变成:
         m + n = 11.00010101 ( 10 ) X 2 3 m + n = 11.00010101(10)X2^{3} m+n=11.00010101(10)X23
  • 将尾数进行舍入处理,最后为10直接加1,变成11.00010110,所以换成原码的尾数为00.11101010,即最终有:
         m + n = 0.11101010 X 2 011 m + n = 0.11101010X2^{011} m+n=0.11101010X2011

转载地址:http://smiqf.baihongyu.com/

你可能感兴趣的文章
Java命令学习系列(一)——Jps
查看>>
java如何计算程序运行时间
查看>>
Java Calendar 类的时间操作
查看>>
Java]NIO:使用Channel、Charset(字符集)、使用Charset传递CharBuffer
查看>>
Eclipse下运行Maven项目提示缺少maven-resources-plugin:2.4.3
查看>>
Java 中int、String的类型转换
查看>>
比较两个JSON字符串是否完全相等
查看>>
删除JSONArray中的某个元素
查看>>
Linux下Tomcat重新启动
查看>>
使用HttpClient请求另一个项目接口获取内容
查看>>
HttpClient get和HttpClient Post请求的方式获取服务器的返回数据
查看>>
net.sf.json Maven依赖配置
查看>>
Could not initialize class net.sf.json.JsonConfig错误解决
查看>>
Java编程思想重点笔记(Java开发必看)
查看>>
eclipse 创建maven 项目 动态web工程完整示例
查看>>
前端JSP与Spring MVC交互实用例子
查看>>
使用maven一步一步构建spring mvc项目
查看>>
hadoop map reduce 阶段笔记
查看>>
java jackcess 操作 access
查看>>
Git问题Everything up-to-date解决
查看>>