计组学习笔记(一):浮点数的表示和运算

  最近学习计算机组成原理,遇到许多疑难问题,接下来写一写我在学习浮点数方面知识的理解,在巩固的同时也方便日后的复习。

一、浮点数的表示

1、浮点数的表示格式

  浮点数,顾名思义,就是小数点不固定的数。计算机中,根据小数点位置是否固定,分为两种数据格式,一种就是这个,小数点不固定,另一种是定点数,小数点是固定的。

  书上科学地对浮点数表示法的定义是,以适当的形式将比例因子表示在数据中,让小数点的位置根据需要而浮动。我们计算机的容量有限,不可能对每个数都用特别多的位数来表示,比如说2×10^99,这种非常大的数不可能用定点数来表示,所以呢利用浮点数就可以在位数有限的情况下扩大数的表示范围,同时能保持一定的有效精度。

  通常情况下,浮点数表示为:N = r^E × M

  式子里面r是浮点数阶码的底在计算机中是隐含的,通常情况下r=2。E和M都是带符号的定点数,E叫做阶码,M叫做尾数。其中E的大小越大,能表示的数范围越大,M的位数越大,数的有效精度越高。

  简单地举一个例子,1.111×2^100这里面1.111就是尾数,100就是阶码,显然这里阶码占的位数为3位,尾数占的位数是4位,假如阶码占的位数有4位,位数占的位数是3位(阶码和尾数所占位数总和不变),那么这个数就只能表示为1.11×2^0100,显然能表示的数的范围变大了,就这个例子来说原来尾数1.111转变为1.11损失了0.001,这就是精度的损失。

 浮点数的一般格式:


  这里J是阶符,表示阶码的符号,S是数符,表示浮点数的符号,阶符J和阶码的m位合起来表示浮点数的表示范围和小数点的实际位置,n位尾数反映了浮点数的精度。

2、浮点数的规格化

  为什么要进行浮点数的规格化呢,我们知道了浮点数的一般格式,同一个浮点数可以有很多表现形式,比如1.111×2^3,还可以表示为0.1111×2^4,还可以表示为11.11×2^2,那我们总不能任意地表示一个数吧,另外还有一个问题就是,如果尾数位数只有4位,我们想要表示同一个数1111采取两种方法,一个是 0.0111x2^5 和 0.1111×2^4(二者最高为是数符位S),我们可以很清晰地看到,如果采用阶码为5的方法,我们损失了一位精度,阶码为4的方法表示这个数更为精确。

  所以,为了提高运算精度,就要充分利用尾数的有效数位,也就是浮点数的规格化,即规定尾数的最高数位必须是一个有效值。非规格化数转变为规格化数,转变过程就是通过调整尾数和阶码的大小,使尾数最高位保证是一个有效值。通常有两种规格化操作:

  左规:当浮点数运算结果是非规格化数的时候,要进行规格化操作,将尾数算术左移一位,阶码减1(基数为2时),左规操作可能要进行多次。

  右规:当浮点数运算结果尾数出现溢出的时候,将尾数算术右移一位,阶码加1。需要右规操作的时候只需要操作一次。

  规格化浮点数的尾数M的绝对值应该满足这样的关系:1/r ≤ |M| ≤ 1(r就是我们的阶码的底,也是基数)。

  以r=2为例:

  1、原码尾数规格化后:正数为0.1xxxxxx形式,最大值为0.11......1;最小值为0.100......0。负数为1.1xxxxxx形式,最大值表示为1.10......0;最小值表示为1.11......1。

  2、补码尾数规格化后:正数同原码正数。负数为1.0xxxxxx形式,最大值表示为1.01......1;最小值表示为1.00......0。

  需要注意的是基数,刚刚是以基数为2时的规格化形式,补码规格化数的尾数最高位一定与尾数符号位相反。基数不同的时候,规格化的形式不同,当基数为4时,原码规格化形式的尾数最高两位不全为0;基数为8时,原码规格化形式的尾数最高三位不全为0。

  如何判断一个浮点数是否是规格化数:规格化浮点数的尾数小数点后的第一位一定是个非零的数。因此对于原码编码的尾数来说,只要看尾数的第一位是否为1就行;对于补码表示的尾数,只要看符号位和尾数最高位是否相反。(IEEE 754标准的浮点数尾数是用原码编码的)

3、IEEE 754标准

  IEEE 754标准采用的浮点数的格式:


  ms为数符,表示浮点数的符号,E为阶码部分,用移码表示,M是尾数部分,用原码表示。

  IEEE 754标准规定常用的浮点数格式有短浮点数(单精度、float)、长浮点数(双精度、double型)、临时浮点数。

  短浮点数数符占1位;阶码占8位,以2为底,用移码表示,阶码偏置值为127(阶码全1表示无限大,E的范围是1~254,空出全0表示非规格化数);尾数部分为23位。

  长浮点数数符占1位;阶码占11位,以2为底,用移码表示,阶码偏置值为1023(阶码全1表示无限大,E的范围是1~2046,空出全0表示非规格化数);尾数部分为52位。

  在IEEE754标准中长浮点数和短浮点数的尾数采用隐藏位策略的原码表示,什么意思呢。举个例子来说,以短浮点数为例,尾数占23位。我们知道,规格化浮点数后,尾数最高位一定是一位有效值,对于二进制浮点数来说,尾数最高位一定是1,那么我们为了充分利用资源,既然最高位一定是1了,我们干脆就把它隐藏好了,因此尾数实际上是24位,在表示的时候尾数23位是纯小数。比如说十进制12(1100),转化为二进制浮点数规格化后为1.1×2^3,这里我们就把整数部分的1 隐藏了,整数部分的1不存在23位尾数中,存的时候就是这样的32位:0   1000 0010   1000 0000 0000 0000 0000 000。

二、浮点数的加减运算

  浮点数运算的特点是阶码运算和尾数运算分开来算。加减运算一律采用补码。具体运算分为以下几步。

  1、对阶:对阶的目的是让两个数小数点的位置看齐,使这两个数的阶码相等。显然1.1×2^3和1.1×2^4是不能直接相加减的。原则是小阶向大阶看齐,像这个例子,就是1.1×2^3的尾数右移一位,阶码加一,直到两个数的阶码相等。

  2、尾数求和:阶码对齐之后就可以直接按照定点数的加减法则运算尾数了。

  3、规格化:尾数求和后的结果如果不是规格化数需要规格化,以双符号位运算为例的话,如果运算结果为正数,规格化的形式应该是00.1xxx......x,如果运算结果为负数,规格化后的形式应该是11.0xxx......x,不符合这种形式的数要进行左规或者右规的操作让其变成这种形式。(在尾数没有溢出的情况下,即尾数结果的双符号为不是10或01的时候,操作都是左规操作,左规操作可能不止进行一次,倘若双符号位为01或10则表明尾数已经溢出了,就要进行右规操作,右规只需要进行一次)

  4、舍入:在对阶和右规的操作中,我们都是将尾数右移,阶码加一,由于我们的位数是有限的,在右移的操作过程中很有可能就将低位的尾数丢失了,这会引起误差和精度问题。常用的减小误差的方法有“0”舍“1”入法:即在尾数右移时,被移去的最高数值位为0则舍去,如果被移去的最高数值位为1则在尾数末位加1,如果加1之后又产生溢出则再右规操作一次。恒置“1”法:看名字就可以知道,无论丢掉的最高数值位是1还是0,都使右移后的尾数末位置1。这种方法可能使尾数变大或者变小。

  5、溢出判断:既然定点数运算可能溢出,浮点数同样也会溢出,我们已经知道浮点数的表示方法和加减运算规则,既然是溢出,那么肯定是超出了浮点数能表示的范围,浮点数的范围主要是由阶码决定的,如果运算结果规格化后阶码产生了溢出,那才是浮点数的溢出。浮点数的溢出与否是由阶码的符号决定的。以双符号位的补码为例,如果阶码的符号位出现01或10则说明阶码溢出了,01表示阶码大于最大阶码,上溢,进入中断处理;10表示阶码小于最下阶码,下溢,按机器零处理。(溢出时真值的符号位和高位符号位保持一致)还要注意的一点是尾数之和(差)可能会造成尾数的溢出,这并不代表整个的溢出,需要右规一次看阶码是否溢出才能判断。


  以上便是我学习浮点数的时候结合书与自己的理解做出的总结,例子都是以基数为2时举的,如果有错误还望看出来的小伙伴勿责怪,帮忙指明一下下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549427.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何查看linux的版本

虽然用过些版本的LINUX系统,但是没有查看过具体的版本是多少来着,下午心血来潮,想查看下自己的版本,到网上收索了下,看到有一大堆命令出来,呵呵,1 最简单的一个uname -a2 cat /etc/issue …

JDBC批量Insert深度优化(有事务)

JDBC批量Insert深度优化(有事务)环境:MySQL 5.1RedHat Linux AS 5JavaSE 1.5DbConnectionBroker 微型数据库连接池测试的方案:执行10万次Insert语句,使用不同方式。A组:静态SQL,自动提交&#x…

ActiveBpel部署运行BPEL流程实例

本文接收使用ActiveBpel开发,部署和运行BPEL流程实例。本文的例子工程和服务工程请见附件。1. 安装ActiveBpel5.0.2要安装ActiveBpel5.0.2,需要先安装JDK1.5,Tomcat。注意这里是JDK1.5版本的,ActiveBpel5.0.2不支持JDK1.5以上的版…

活动目录实战系列五(更改域名)

在单域环境下且没有什么服务的情况的改域名还行,如果网络环境比较复杂或者有其他服务,不建议更改。以免发生错误。在实验中由于虚拟机坏掉在这里使用了两个,有部分图片对不上,请谅解。 WIN2000域不支持域重命名域重命名并不是在域…

KMP算法 Next数组详解(【洛谷3375】KMP字符串匹配 )

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/qq_30974369/article/details/74276186 </div><div id"content_views" class"markdown_views"><!-- flowchart 箭头图标 勿删 --…

转自知乎-我见过最通俗易懂的KMP算法详解

有些算法&#xff0c;适合从它产生的动机&#xff0c;如何设计与解决问题这样正向地去介绍。但KMP算法真的不适合这样去学。最好的办法是先搞清楚它所用的数据结构是什么&#xff0c;再搞清楚怎么用&#xff0c;最后为什么的问题就会有恍然大悟的感觉。我试着从这个思路再介绍一…

Redis在Window服务下的安装

Redis 安装1.首先在Windows下下载安装Redis下载地址&#xff1a;https://github.com/MicrosoftArchive/redis/releases根据你电脑系统的实际情况选择32位还是64位&#xff0c;在这里我下载了的是Redis-x64-3.0.500.zip压缩包&#xff0c;压缩后得到解压文件.2.测试运行打开一个…

排队时延(Queuing delay)

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请注明出处。 https://blog.csdn.net/zhangskd/article/details/18224897 </div><link rel"stylesheet" href"https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57…

爬山法实现 八皇后问题 (Python 实现)

本文主要简单阐述爬山法的基本算法思想&#xff0c;并给出用此算法实现八皇后问题详细过程 最基本的爬上搜索算法表示&#xff1a;(节选自《人工智能》第二版)&#xff1a; function HILL-CLIMBING(problem) return a state thate is a locak maximum inputs: problem …

八皇后问题和八数码问题的最陡上升爬山法、首选爬山法、随机重启爬山法、模拟退火算法的分析和实现

对经典算法的问题的回顾与感想 对八皇后问题和八数码问题分别用最陡上升爬山法、首选爬山法、随机重启爬山法、模拟退火算法来实现&#xff0c;并且分析他们的性能。 分析 要求实现的各个算法是有共同点的&#xff0c;比如&#xff0c;八皇后问题相关算法拥有相同的状态空间&…

配置BGP

配置BGP<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />一、 实验目的:配置BGP协议,实现两个isp之间的通信二、 实验拓扑结构图三、实验步骤1. 基本接口配置(略) 2. 配置bgp协议isp<?xml:namespace prefix …

MyXls初级教程

这些天使用MyXls导出Excel报表&#xff08;因为Apose.Cells要收费&#xff09;。感觉MyXls虽然功能远没有Cells强大&#xff0c;但是胜在开源、免费而且性能稳定可靠。用作出一般情况下的报表。足矣&#xff01; 记下几个初级使用方法&#xff0c;希望能够给初入门的人一点帮助…

蓝桥杯 - 历届试题 - 日期问题

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/qq_33531813/article/details/79516258 </div><div id"content_views" class"markdown_views"><!-- flowchart 箭头图标 勿删 --…

分享WCF文件传输---WCFFileTransfer

前几天分享了分享了WCF聊天程序--WCFChat &#xff0c;本文和大家一起分享利用WCF实现文件的传输。程序运行效果&#xff1a;接收文件端&#xff1a;发送文件端&#xff1a;连接WCF服务&#xff0c;选择要传输的文件文件传输成功&#xff1a;我们会在保存文件的默认路径&#x…

字符串的模式匹配--BF算法KMP算法

BF算法是基于主串指针回溯&#xff0c;重新与子串进行逐字符进行比较&#xff0c;主串为S什么要进行回溯呢&#xff0c;原因在于模式P中存在相同的字符或者说由字符&#xff08;串&#xff09;存在重复&#xff08;模式的部分匹配性质&#xff09;&#xff0c;设想如果模式P中字…

用SQL Server 监控 OS Server 的Task Management信息

用SQL Server 监控 OS Server 的Task Management信息 --原文来自于http://www.databasejournal.com/features/mssql/article.php/3562586/Monitor-CPU-Usage-of-All-Running-Processes---Part-II.htm 一&#xff1a; 监控程序部分 1. 在C 盘创一个文件夹&#xff1a;如 C…

匈牙利算法——最大匹配问题详解

2017年中兴提前批校招&#xff0c;就考了一题匈牙利算法。 匈牙利算法是由匈牙利数学家Edmonds于1965年提出&#xff0c;因而得名。匈牙利算法是基于Hall定理中充分性证明的思想&#xff0c;它是部图匹配最常见的算法&#xff0c;该算法的核心就是寻找增广路径&#xff0c;它是…

字符串匹配之KMP---全力解析

PS&#xff1a;文章是转载的 下方的微信公号不是我的 是原作者的。附上原文链接&#xff1a;字符串匹配之KMP jeliy王的博客 近日&#xff0c;一同学面试被问到字符串匹配算法&#xff0c;结果由于他使用了暴力法&#xff0c;直接就跪了(现在想想这样的面试官真的是不合格的&am…

用Dreamweaver实现ASP动态网站建设【8】

八、制作删除数据记录页 用上述学过的方法在Index.asp上创建“删除”连接。新建网页命名为delete.asp&#xff0c;并打开它&#xff0c;在其上创建一个七行二列的表格&#xff0c;并在左边的表格上填写相应的字段名&#xff0c;然后给网页绑定一个记录集&#xff0c;并对其字段…

大学计算机网络复习题

模拟试题 一、填空题 1、局域网中常用的拓扑结构主要有星型、 环形 、总线型三种。 2 、在当前的网络系统中&#xff0c;由于网络覆盖面积的大小、技术条件和工作环境不同&#xff0c;通常分为广域网、 局域网 、和城域网三种。 3、常用的通信介…