关注微信公众号“虾米聊吧” 获取所有资料干货,每天更新技术干货,一起交流一起学习~

浮点数的表示

科学计数法

任意一个十进制数N可以写成:

同样,在计算机中一个任意进制数N可以写成

在计算机的世界里R默认是2,表示二进制,因此R在计算机中不用单独存储,而M和e需要单独存储

尾数(M):用定点小数表示,给出有效数字的位数,决定了浮点数的表示精度

阶码(E):表示指数(并不等同于e,他们之间有一种对应关系),用整数形式表示,指明小数点在数据中的位置,决定了浮点数的表示范围

比例因子(R):不表示,默认值,一般为2

问题:在计算机中各个部分分别占据多少位?

IEEE754标准浮点数的表示方法

单精度float总共32位

32位的浮点数中:

S:浮点数的符号位(即最高位表示符号位),占1位,0表示正数,1表示负数

M:尾数,占23位,用小数表示,小数点放在尾数域的最前面

E:阶码,占8位,阶符采用隐含方式,即采用移码方式来表示正负指数

指数e和阶码E之间的对应关系,应将指数e加上一个固定的偏移值,即:E=e+127

IEEE754标准中,一个规格化的32位浮点数 x的真值可表示为:

其中(-1)^s,s表示符号位,s=0则(-1)^0=1为正数,s=1则(-1)^1=-1为负数;

M表示阶码,默认为1 * M,e=E-127

其中,S、M、E都存在计算机中,而其它数值都是默认固定的

64位的浮点数:

S:浮点数的符号位(即最高位表示符号位),占1位,0表示正数,1表示负数

M:尾数,占51位,用小数表示,小数点放在尾数域的最前面

E:阶码,占11位,阶符采用隐含方式,即采用移码方式来表示正负指数

同理一个规格化的64位浮点数x的真值为:

例:

说明:

(1.75)10 = 1.11 * 2^0

对于32位的浮点数来说:

所以因为是正数S=0

因为是1.M的格式,所以M=1100000...0 (因为总共23位,存在2个1,所以后面21个0)

因为e=0,而E=127+e,所以E=127

补充说明:

(1)当阶码E为全0(0000,0000)且尾数M也为全0时,表示的真值x为零,结合符号位S为0或1,有正零和负零之分。

(2)当阶码E位全1(1111,1111即255)且尾数M为全0(0000,0000)时,表示的浮点数为无穷大,结合符号位S为0或1,也有+无穷和-无穷之分

因此在32位浮点数表示中,要除去E用全00000000和全11111111(255)10表示零和无穷大的特殊情况,因此阶码E的取值范围为00000001(1)到11111110(254);又因为e=E-127,所以e的取值范围为(1-127) ~ (254-127)即 -126 ~ +127

浮点数的加减运算

两浮点数进行加法和减法的运算规则即操作过程大体分为四步:

1.0操作数的检查

判断两个操作数x或y中有一个数为0,则直接得出结果

2.比较阶码大小并完成对阶

判断两个操作数的阶码是否相同,如果相同则直接进行尾数的加减法运算。如果不同则需要使两个操作数的阶码相同即对阶,首先求出两个数的阶差,由于尾数左移会引起最高有效位的丢失,造成很大的误差,尾数右移虽引起最低有效位的丢失,但造成的误差较小,因此对阶操作规定使尾数右移,尾数右移后阶码作相应增加,其数值保持不变。显然,一个增加后的阶码与另一个阶码相等,增加的阶码一定是小阶。

因此对阶的原则是小阶向大阶看齐,即小阶的位数向右移位(相当于小数点左移)每右移一位,其阶码加1,直到两数的阶码相等为止,右移得位数等于阶差。

3.尾数进行加或减法运算

4.结果规格化并进行舍入处理

规格化:

1/2 =< |M| < 1

(M是小数,所谓M>=1/2 即:|M|>=0.1,因为是按二进制处理,1/2即右移一位即0.1)

但在浮点运算中,尾数求和结果的绝对值大于1(即溢出符号位为01或10),叫做向左破坏了规格化;此时将尾数运算结果右移以实现规格化表示,称为向右规格化;尾数右移一位,阶码加1;以保证浮点数大小不变;

运算结果的绝对值小于1/2,叫做向右破坏规格化,此时将尾数结果左移实现规格化表示,称为向左规格化;尾数左移一位,阶码减1,以保证浮点数大小不变;

(1)尾数用原码表示,[S]原=Sf.S1S2....Sn,如果尾数未发生溢出,但S1=0,则向右规格化,即S1必须等于1,否则需要进行规格化处理

(2)尾数用补码来表示,[S]补=Sf.S1S2....Sn,如果尾数未发生溢出,但Sf 异或 S1=0,即Sf和S1相同,则向右破坏规格化

浮点数的溢出是以阶码溢出表现出来的(因为如果是尾数溢出可以通过相应的右移处理,所以尾数溢出称为假溢出)。在加减法运算过程中要检查是否产生了溢出;若阶码正常加(减)运算正常结束;若阶码溢出,则要进行相应处理

qq群 :557911445  个人qq:193459197

关注微信公众号“虾米聊吧”,后续持续放送“技术架构和资料”干货!!!

一个热衷于分享技术和生活的程序猿,让我们一起交流吧~

微信扫描二维码,关注我的公众号

计组—浮点数表示和运算相关推荐

  1. 计组 浮点数运算 /阶码定义/ 阶码是什么/ 尾数减法

    计组真的是非常头痛的一门学科,几年前数电学各种编码就各种算不对,现在又来了,总结两个自己混淆的知识,阶码和尾数减法,希望能帮到同样迷茫的朋友. 阶码的定义 1.阶码,书上根本每个清晰的定义,第一次提到 ...

  2. 计组 | 浮点数、浮点数补码规格化

    一.什么是浮点数 浮点数让小数点的位置根据需要而浮动.它跟定点数不一样,定点数的小数点是固定的,默认在一个位置上. 公式 可以将其看成科学计数法来理解,即 103=1.03×102 .但是在浮点表示法 ...

  3. 计组期末复习之例题与解析

    计组例题与解析 第一章:概论 无 第二章:运算方法和运算器 例2-1 求补码 对于正数,不变 对于负数,符号位不变,数值位取反加一 例2-2 数轴形式表示原码.反码.补码范围 第一位符号位,后面是数值 ...

  4. 计组期末复习---个人版

    (一)计算机系统概论 1.1计算机分类与发展历史 分类:电子模拟计算机和电子数字计算机 电子模拟计算机:数值由连续量来表示,运算过程是连续的 电子数字计算机:按位运算,并且不是连续地跳动运算 专用计算 ...

  5. 【计组理论期末考试模拟题】21级计科专业计算机组成原理

    [计组理论期末考试模拟题]21级计科专业计算机组成原理 一.选择题 二.多选题 三.填空题 四.程序填空题 五.编程题 一.选择题 2-1 在定点二进制运算器中,减法运算一般通过()来实现. A.原码 ...

  6. 计算机组成实验六MIPS汇编器,杭电计组实验6-MIPS汇编器与模拟器实验.doc

    <杭电计组实验6-MIPS汇编器与模拟器实验.doc>由会员分享,提供在线免费全文阅读可下载,此文档格式为doc,更多相关<杭电计组实验6-MIPS汇编器与模拟器实验.doc> ...

  7. 计算机各个部件配合完成加减乘除(计组学习二)

    大家好,我是贺贺. 计算机组成原理系列 计算机的五大组成部分(计组学习一) 计算机各个部件配合完成加减乘除(计组学习二) 预热一下 当我们了解了计算机的五大组成部分后,下面我来聊聊计算机的各个部件是怎 ...

  8. 计算机的五大组成部分(计组学习一)

    大家好,我是贺贺,一个爱唱歌但是五音不全的程序员 计算机组成原理系列 计算机的五大组成部分(计组学习一) 计算机各个部件配合完成加减乘除(计组学习二) 计算机的故事 在开始啃计算机组成原理(下文简称计 ...

  9. 【王道计组笔记】高速缓存器:局部性原理及性能分析

    背景: 随着CPU的工作速度成指数级增长,但是主存速度跟不上,所以要提升主存速度非常重要. m个模块采用低位交叉编址的方式可以基本上将主存的带宽提升m倍,但是这依旧与CPU差距很大. [王道计组笔记] ...

最新文章

  1. C++继承时的对象内存位置(一)
  2. 从身份管理系统思考企业CMDB的建设
  3. python 字符串 f_Python字符串格式化f-string多种功能实现
  4. 工程之道,深度学习的工业级模型量化实战
  5. Git----分支管理之分支管理策略04
  6. word粘贴至html特殊字符 粘贴后可能为乱码
  7. 并发、并行、线程、进程与CPU基本概念
  8. WordPress主题LensNews模板源码,2.2版本多功能新闻积分商城主题
  9. C#:系统学习笔记(一)MVC基础篇
  10. 论文笔记_S2D.36_2017-CVPR_CNN-SLAM: 实时稠密单目SLAM与学习深度预测
  11. 【数据库原理及应用教程】【数据库系统的体系结构】【1.4-1.6】
  12. vos3000v2.1.6.0客户端 vos3000 6.0下载
  13. Diamond软件的使用(5)--建立Modelsim仿真环境
  14. 英文连写字体怎么练_“衡中体”英语书写视频受到英国媒体关注,现在开始练还不晚!...
  15. signature=99daf37ca32015c39987d04abe5a559d,合肥2015年7月4日至2015年7月16日交通违章查询...
  16. 第三方登录/分享最佳实践
  17. CSDN线上竞赛第52期题解
  18. 点线面的意义_聊聊「点线面」的概念
  19. 小学文凭宝妈在家开网店?其实做跨境并不难!
  20. ajax里数组添加数据,小笔记(一):ajax传递数组及将ajax返回数据赋值

热门文章

  1. Linux安装net的工具,centos7安装netbox(不错开源网络管理工具) – 运维那些事
  2. centos 7 升级/安装 git 2.7.3
  3. 打印日志的10个建议
  4. VisualSVN 备份
  5. 鸿蒙系统超级功能,华为再发新版鸿蒙OS系统!新增超级终端功能:可媲美iOS系统...
  6. linux错误代码0x8008005,利用Windows10自带Linux学习(附带:0x8007019e错误解决方法)...
  7. java listener详解_Java监听器Listener使用详解
  8. rider连接mysql数据库_GitHub - alchemystar/Rider: 文件数据库
  9. Sequence Sorting CodeForces - 1223D(思维)
  10. 关于计算机的英语作文九年级,实用的九年级英语作文合集6篇