定点数的加减法以及浮点数的表示

news2024/11/23 0:44:07

加减法运算是计算机中最基本的计算,由于减法可以看成是负值是加法,因此计算机中使用补码表示有符号数之后,可以将减法运算和加法运算合并在一起讨论。

1.补码的加减运算

补码加减运算的规则简单,公式如下(设机器字长为n):

补码运算的特点如下:

1.逢2进1

2.如果做加法,两数的补码直接相加;如果做减法,则将被减数加上减数的机器负数。

3.符号位和数值位一起参与运算,加、减运算结果的符号位也在运算中直接得出。

4.最终将运算结果的超过n位的位丢弃,保留n位,运算结果也是补码。

假设机器字长位8,那么

2.溢出判别方法 

溢出是指运算结果超过了数的表示范围。通常,大于能表示的最大正数称为正上溢,小于能表示的最小负数称为负下溢。

 补码加减运算的溢出判断方法有两种:

(1)采用一位符号位

由于减法运算在机器中是用加法器实现的,减法可以看作一个正数和负数的加法;所以不管是加法还是减法,只要参加操作的两个数符号位相同,但是结果又与原操作数不同,则表示结果溢出。

但是一正一副相加必然不会溢出。

(2)采用双符号位

运算结果的两个符号位相同则表示未溢出,若两个符号位不同则溢出。

若发生了溢出,则此时的最高位就代表真正的符号。但是由于溢出了,我们要把它丢掉。

符号位为00表示正数无溢出 为11表示负数无溢出,

           为01表示结果正溢出 为10表示结果负溢出。

2.浮点数的表示

浮点数是小数点可以浮动的数。例如:

 3.浮点数的表示范围

很明显,采用补码的优势在于方便做加减运算,但是在表示尾数时,数值范围就无法相对远点对称了。而且对于浮点数来说,尾数是不能直接做加减的,因此需要先把阶数对齐,所以使用补码的好处并不明显;反而是在做乘除运算时,阶码需要直接做加减操作。

所以我们可以发现,阶码可以用补码表示,而尾数用原码和补码表示都可以,而原码会更好一些

移码表示阶码还有一个好处,就是方便进行对阶(阶数的比较和对齐) 

4.浮点数的规格化

由于规格化数的精度最高,所以一个非零的浮点数不是规格化数时,应该通过左右移动尾数、并同时修改阶码的方法,将它转换为规格化数。把一个非规格化数转换成规格化数的过程,叫做规格化。

规格化的本质类似于科学计数法的表达,通过保证尾数的最高数位上是一个有效值,尽可能多地保留有效数字的尾数,从而提高精度。

规格化可以分为左规右规两种。

以基数r=2为例:

左规:

  • 向左规格化,当运算结果尾数的最高有效位不是有效位,即出现0.00......01...的形式时,需要向左规格化。
  • 左规时,尾数左移一位,阶码减1;

右规:

  • 向右规格化,当运算结果尾数的小数点左侧出现有效位,即整数部分不为0时,需要向右规格化。右规时,尾数右移动一位,阶码+1
  • 需要右规时,只需要规1次。

---------------------------------------------------------------------------------------------------------------------------------当基数不为2时,比如基数为4,阶码每次加/减1,就相当于多乘/除以4,也就是左/右移两位。

我们规定尾数两位不全为0的数,就是规格化数。

规格化数的取值范围缩小了,下图是规格化数的取值范围。

5.IEEE 754标准

  • IEEE标准用规格化数表示一般的数值,这时尾数M的最高有效位一定为1;于是IEEE标准规定这个最高有效位的1可以省略,并且将它隐藏放在整数位上,称为“隐藏位”。这样就可以多出一位有效数位,从而提高了精度。就比如:短浮点数的23位尾数,可以表示24位有效数字。临时浮点数不采用隐藏位的方案
  • IEEE标准使用非规格化数表示0附近的很小的数。这时阶码E所有位全部位0;尾数M不为0,且没有隐藏位。或者说隐藏位为0.

此外,IEEE标准还规定了几种特殊情况:

  • 阶码E所有位为0,并且尾数M也为0.表示0 。根据数符不同可分为正负0
  • 阶码E所有位全为1,并且尾数M为0时,表示无穷大,也可以分为正负无穷
    • 阶码E所有位为1,并且M不为0时,表示这不是一个数(NaN-->Not a Number)。

非规格化数中,阶码减去偏执量之后要加1,这样可以让它跟最小的规格化数有一个平滑的过渡。

原因是:最小的规格化数减去最小的非规格化数便是最大的非规格化数,而最小的非规格化数是非常小的。

 6.定点、浮点的区别

  • 数值的表示范围不同。对于相同的字长,浮点表示法所能表示的数值范围远大于顶点表示法。
  • 数值精度不同。对于相同的字长,浮点数虽然扩大了数的表示范围,但精度降低了(可用于表示数的位少了)
  • 数据的运算不同。浮点数需要算阶码和尾数量部分,而且还需要考虑规格化。
  • 溢出的定义不同,定点数运算中,只要运算结果超出了数的表示范围则溢出。而浮点数运算中,当运算结果超出尾数表示范围后,不一定发生溢出;只有规格化后,阶码超出所能表示的范围时,才发生溢出。

7.浮点数的运算

(1)对阶

“小阶向大阶看齐”,将阶码小的尾数右移一位(r=2),阶码加1,直到两个数的阶码相等。

(2)尾数求和

对尾数求和

(3)规格化

需要注意,右规时,最高位1被移到小数点前一位时,作为隐藏位即可;当最后一位移出时,要考虑舍入。

(4)舍入

在对阶和尾数右规时,右移可能会让低位丢失,影响精度,IEEE 754有以下四种舍入方式:

  1. 就近舍入-->类似于四舍五入
  2. 正向舍入-->取右边的数,也叫“向上舍入”
  3. 负向舍入-->取左边的数,也叫“向下舍入”
  4. 截断->像0方向舍入,即取绝对值较小的那个值。

(5)溢出判断

浮点数的溢出并不是以尾数溢出来判断的;尾数溢出可以通过右规操作来纠正。运算结果是否溢出看的是阶码。

  • 上溢-->异常
  • 下溢-->把结果当机器零处理。

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

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

相关文章

Spark日志有哪些?

spark.log:记录作业运行日志,包括Spark框架内部日志和用户通过日志接口输出的日志。 executor 启动结束日志: job,stage,task提交结束日志: pmap.log:周期性地截取Driver或Executor的pmap和…

基于SSM+Jsp的列车票务信息管理系统

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…

多设备互通、开箱即用的私有化笔记软件,极空间部署最强备忘录项目『Memos』

多设备互通、开箱即用的私有化笔记软件,极空间部署最强备忘录项目『Memos』 哈喽小伙伴们好,我是Stark-C~ 手机上的备忘录我想绝大多数的小伙伴都会用到,日常用来记录一下生活中的消费开支清单,或者工作中记录一些重要的任务或项…

欧洲杯“球迷狂欢趴”开启,容声带来“健康养鲜”新理念

6月15日,容声冰箱在深圳举行了异彩纷呈的“欧洲杯养鲜补给站 球迷狂欢趴”系列活动。 容声国内营销总经理韩栋现场发布“以品质领先 为健康养鲜”的主题内容,强调容声将以健康养鲜技术产品的升级迭代,满足用户品质生活需求。 作为有着41年发…

【java分布式计算】分布式计算程序设计基础

期末复习 自留 重点只抓考点 目录 基本技术 SOCKETS网络套接字 多线程 数据序列化 Java I/O流 集合容器 范型 内部类、匿名类、Lambda(代码) 项目构建管理工具 高级技术 注解(代码) 反射(代码)…

为什么选择 ABBYY FineReader PDF ?

帮助用户们对PDF文件进行快速的编辑处理,同时也可以快速识别PDF文件里的文字内容,并且可以让用户们进行文本编辑,所以可以有效提升办公效率。 ABBYY-ABBYY Finereader 15 Win-安装包:https://souurl.cn/OY2L3m 高级转换功能 ABBY…

Python酷库之旅-比翼双飞情侣库(10)

目录 一、xlrd库的由来 二、xlrd库优缺点 1、优点 1-1、支持多种Excel文件格式 1-2、高效性 1-3、开源性 1-4、简单易用 1-5、良好的兼容性 2、缺点 2-1、对.xlsx格式支持有限 2-2、功能相对单一 2-3、更新和维护频率低 2-4、依赖外部资源 三、xlrd库的版本说明 …

常见中间件漏洞

IIS IIS是Internet Information Services的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。 IIS目前只适用于 Windows系统,不适用于其他操作系统。 解析漏洞 IIS6.x 该版本 默认会将 *.asp;.jp…

一. 做一个前后端分离的电商项目(技术栈 : springboot+mybatis-plus+vue) 的前期准备

前期准备 ---- 项目创建和配置 一.创建springboot项目二.项目前期准备工作1. 修改springboot和jdk版本号2.Web请求处理(1) 添加web依赖(2) 测试是否能够成功访问(3) 修改端口号(4) 创建数据库 3. 连接数据库(1) 添加依赖(2)配置application.properties文件(3)添加包扫描 Mapper…

【R语言】数据可视化分析和统计检验——线性和线性混合效应模型

R语言数据可视化分析和统计检验 写在前面1、数据读取及分析2、组间均值和标准差统计分析3、图像数据探索3.1 图像绘制(查看是否存在极端数据,以及数据分布情况)3. 2 数据标准化(Z-scores)3.3 绘制数据相关性 4、ggplot…

使用 Python 进行测试(4)为什么要测试?测什么?

总结 要知道测试的内容,首先要知道测试的原因。下面是测试的几个主要目的: 避免回归质量管理匹配规格淡化责任让你放心学习测试选中一个框 你为什么要测试? 要决定测试什么、测试多少以及以什么顺序测试,您需要首先弄清楚测试的…

Docker部署Nginx下载站点服务

1、下载镜像 由于docker官方镜像站点被封了,所以我把镜像上传到阿里云镜像仓库了 docker pull registry.cn-hangzhou.aliyuncs.com/qinzt-tools/file-nginx:1.18.02、运行容器实例 运行变量解释: 变量名称默认值解释USERhyadmin访问下载站点的认证用…

Java--Arrays类

1.数组的工具java.util.Arrays 2.由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作。 3.查看JDK帮助文档 4.Arrays类中的方法都是static修饰静态的静态方法&…

Java高频面试题整理(几万字)

👩🏻 作者:一只IT攻城狮 ,关注我不迷路 ❤️《java面试核心知识》突击系列,持续更新… 💐 面试必知必会学习路线:Java技术栈面试系列SpringCloud项目实战学习路线 📝再小的收获x365天…

Golang: 依赖注入与wire —— 构建高效模块化应用的秘诀

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【AI基础】第六步:纯天然保姆喂饭级-安装并运行qwen2-7b

整体步骤类似于 【AI基础】第五步:纯天然保姆喂饭级-安装并运行chatglm3-6b-CSDN博客。 此系列文章列表: 【AI基础】概览 【AI基础】第一步:安装python开发环境-windows篇_下载安装ai环境python 【AI基础】第一步:安装python开发环…

Java17 --- SpringSecurity之前后端分离处理

目录 一、实现前后端分离 1.1、导入pom依赖 1.2、认证成功处理 1.3、认证失败处理 1.4、用户注销处理 1.5、请求未认证处理 1.6、跨域处理 1.7、用户认证信息处理 1.8、会话并发处理 一、实现前后端分离 1.1、导入pom依赖 <dependency><groupId>co…

ComfyUI

文章目录 一、关于 ComfyUI特点快捷键QA你为什么做这个&#xff1f;这是给谁的&#xff1f; 二、安装1、Windows直接链接下载如何在另一个UI和ComfyUI之间共享模型&#xff1f; 2、Jupyter Notebook3、手动安装&#xff08;Windows、Linux&#xff09;AMD GPU&#xff08;仅Lin…

MEMS:Lecture 18 Feedback

讲义 Linear feedback MEMS热板 Hotplate MEMS&#xff08;微机电系统&#xff09;热板是现代气体传感器的重要组成部分。它们通过加热一种活性材料来工作&#xff0c;这种材料与气体发生反应&#xff0c;从而改变其电阻。电阻的变化可以用来检测和测量特定气体的存在和浓度。…

讨论C++模板

讨论C模板 函数重载和泛型编程模板分类函数模板语法原理函数模板的实例化隐式实例化显示实例化 匹配原则 类模板语法类模板的实例化 C支持了函数重载&#xff0c;通过函数名相同&#xff0c;参数列表不同来构成函数重载&#xff0c;以达到方便程序员调用。但还是没有改变代码大…