一道浮点数计算的题目,计算了很长时间,最终结果还是因为部分细节出错,导致全盘皆错,因此,有必要认真总结浮点数计算牵涉到的方方面面的数据表示的细节。

这个过程本身相当有趣,因为人脑在处理二进制方面并没有十进制那种直觉。尤其是当在补码下计算,总是得先进行一次数据的反加1才能看出数字的本意,进行一个减法,也需要默念,将减数连通符号位求反加一再和减数相加。甚至不如直接进行十进制数的加减再换算为补码。。

这个过程中需要多次进行这样的计算,仅仅明了计算规则,根本不能解决问题,需要的是细心,以及–实力。

好了,直接看题目,然后再在解析的过程中,一一解释。

已知十进制数X = -5/256, Y = +59/1024,按机器补码浮点运算的规则计算X-Y,结果用二进制表示,浮点数的格式如下:阶符取2位,阶码取3位,数符取2位,尾数取9位。

OK,首先在脑海中建立一种浮点数的格式:阶符+阶码+数符+尾数。

且均用补码表示。

这里题目中给出的小数很nice。
先用自然的语言表示一下,不考虑有多少位数用于存储:
X=−101⋅2−8X = -101 \cdot 2^{-8}
Y=+111011⋅2−10Y = +111011 \cdot 2^{-10}

再考虑移位使之满足规格化的形式。
X=−0.101⋅2−5X = -0.101 \cdot 2^{-5}
Y=0.111011⋅2−4Y = 0.111011\cdot 2^{-4}

再最终化为补码的形式:

X=11,011;11,011000000X = 11,011;11,011000000 (分号前是阶码的补码表示:-5,分号后面是-0.101的补码表示)
Y=11,100;00,111011000Y = 11,100;00,111011000(分号前面是阶码的补码表示:-4,分号后面是0.111011的补码表示)

这里有我比较迷惑的一点,在表示-0.101的时候,化为补码我知道是11.011,但是尾数有9位,在后面要补1还是补0?

如果是补1的话就是:11.011,111,111补11.011,111,111_补化回来就是11.100,000,001原11.100,000,001_原,等同于末尾加了个1,且前面的三位也不是以前的了。因此补1是不行的。

如果补0:11.011,000,000补11.011,000,000_补 化回来是11.101,000,000原11.101,000,000_原

我们知道后面的6个0,求反变成1后,是6个1,再因为加1会变成6个0并且往上进位一个1.
这里是不是因为11.011最低位是1,所以正确,如果是11.010补11.010_补呢?11.010补11.010_补对应的原码是11.110原11.110_原

我们把补码补位到9位:11.010,000,000补11.010,000,000_补,化回来是:11.110,000,000原11.110,000,000_原

模拟这个过程时,突然明白了补0的原因:原码的数据位变补码是求反加1,这个1加在原来数据位的最低位,现在最低位在补的数据位里成了中产阶级,这个1会加到新的数据位长度的位置上,这是不行的,因此这个补贴需要通过链式传递的方式传回来。因此,补位的补码全是0.

解释的原因就是想说,如果一个补码小数被扩大了尾数的表示位数,在低位补0.

Ok,表示结束后,开始对阶:小阶变大阶。

所以是X的阶码往大里变。

X=11,100;11,101,100,000补X = 11,100;11,101,100,000_补
Y=11,100;00,111,011,000补Y = 11,100;00,111,011,000_补

于是再进行尾数求和:[X尾]补−[Y尾]补=[X尾]补+[−Y尾]补[X_尾]_补-[Y_尾]_补 = [X_尾]_补 + [-Y_尾]_补

其中[−Y尾]补=[Y尾]补连同符号位求反加一[-Y_尾]_补 = [Y_尾]_补连同符号位求反加一

所以得到:10,110,001,00010,110,001,000所以有溢出,需要右规,变成:11,011,000,10011,011,000,100.
右归必然使得阶码加1,可以表示成:
11,100+00,001=11,10111,100 + 00,001 = 11,101

于是最终结果是:11,101;11,011,000,100.

也就是:2−3⋅(−0.1001111)2=−0.07714843752^{-3} \cdot (-0.1001111)_2 = -0.0771484375

而我们知道,如果真的计算$X - Y = +0.0380859375$

可见,因为位数的限制,还是有很大的误差的。

由一道习题看如何设计浮点数相关推荐

  1. 关于信道利用率的总结与一道习题的最终解释

    首先是概念. 信道利用率,也叫信道的效率,定义很多,但是常用的是时间角度的定义. OK,上定义:对发送方而言,发送方在一个发送周期内,有效地发送数据所需要的时间占整个发送周期的比率. 那么,什么是发送 ...

  2. 从面向对象的设计模式看软件设计

    原文作者:陈皓( 酷 壳 – CoolShell.cn) 原文链接:从面向对象的设计模式看软件设计 前些天发了一篇<如此理解面向对象编程>的文章,然后引起了大家的热议.然后我在微博上说了一 ...

  3. 推荐给大家看的设计书

    详情点击:http://www.china-pub.com/129873 [来自:秦歌]毫无疑问,这个世界设计无处不在,优美的设计会得到会心的微笑和由衷的赞赏.然而,想从事设计或在设计边缘的人们未必有 ...

  4. 《写给大家看的设计书:实例与创意(修订版)》—1你已经知道多少了?

    本节书摘来自异步社区<写给大家看的设计书:实例与创意(修订版)>一书中的1你已经知道多少了?,作者 [美]Robin Williams,更多章节内容可以访问云栖社区"异步社区&q ...

  5. 读《写给大家看的设计书》

    读<写给大家看的设计书> 这段时间略读了一遍<写给大家看的设计书>第四版,作为一名开发者来说,这种设计细胞确实不怎么样.通过略读也有一些收获,而贯穿全文的"4大基本原 ...

  6. 《写给大家看的设计书》封面评选结果揭晓

    <写给大家看的设计书>封面评选结果揭晓 首先感谢各位朋友对本次封面设计大赛的支持和关注.一共有10余位朋友参加了本次封面设计大赛,来自广州的杨铭先生艺压群英,获得了本次大赛的优胜奖. 根据 ...

  7. 《写给大家看的设计书》封面设计基本要求

    <写给大家看的设计书>封面设计基本要求 1.成书尺寸:187*235(mm),书籍厚度:10mm(暂定). 2.作品格式:源文件(可编辑)和300像素JPG文件,参加评选时提交JPG文件即 ...

  8. 由一道题目看抽象向量组的线性相关问题

    由一道题目看抽象向量组的线性相关问题 @(数学) 方法:观察法 || 定理 ||过渡矩阵 已知向量组α1,α2,α3\alpha_1,\alpha_2,\alpha_3线性无关,则下面的向量组线性相关 ...

  9. 《写给大家看的设计书》(第四版)分享

    作者的话: 本书假设你没有足够的时间或者兴趣来专门学习设计和排版技术,但是又很想知道如何才能让页面看上去更好一些.倘若如此,本书肯定会令你满意.我们的前提很老套,还是那句格言:知识就是力量.看到一个设 ...

最新文章

  1. JPA入门例子(采用JPA的hibernate实现版本)
  2. Elasticsearch5.X IN Windows 10 系列文章(1)
  3. 计算机世界的虚拟机,容器和医学界的人工硬脑膜
  4. MNIST 手写数字识别,我是如何做到886个可训练参数,识别率达到98.2%? (参数、模型压缩), Keras实现,模型优化
  5. mysql show 命令_mysql show 相关命令
  6. 一图读懂马云与阿里20年:互联网巨头是如何养成的?
  7. 单独编译apache的rewrite模块
  8. 转帖一则——从医学角度论成熟
  9. 常用集合(ArrayList、Hashset、HashMap)的用法(会一直更新)
  10. 泛微OA二次开发环境搭建 ecology二次开发
  11. 2.4G有源RFID数据读取实验
  12. 三阶矩阵求特征值的快速算法
  13. 英语单词如何看字母划分音节
  14. clipboard 多次回调
  15. Hadoop简介和家族成员介绍
  16. shell小技巧(一百三十三)n个人报数出局游戏
  17. 深入浅出JVM内存模型+垃圾回收算法
  18. MRP是MRPII的核心,也是系统实施的难点及系统成效的关键
  19. h5小游戏--围住神经猫笔记
  20. 安卓手机变成横屏_这下牛bi了,自己体会!这才是手机上该有的神器!

热门文章

  1. PHP两个匿名函数传递性,PHP让人不知道的匿名函数的几种写法(附代码)
  2. java attributes用法_C#中的Attributes的用法
  3. ubuntu vscode_17. ubuntu设为服务器+vscode远程开发
  4. [Python] 中英文标点转换
  5. android卸载弹出窗口,卸载Android app弹出浏览器的一种实现
  6. 如何在xshell中查看某一接口的服务_【干货分享】如何使用远程工具进入Linux系统...
  7. android布局错,Android Studio布局错误
  8. javaweb增删改查实例_JavaWeb图像可视化管理系统之后台搭建(二)用户管理与增删改查(内含代码)...
  9. python爬取js script中的变量_BeautifulSoup抓取js变量
  10. python变量命名规则思维导图_python基础知识点思维导图