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

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

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)溢出判断

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Windows11 安装 Detectron2】

Windows11 安装 Detectron2 1. 创建虚拟环境2.配置Pytorch环境3. 安装cocoapi4. 下载detectron24.1 修改setup.py4.2 修改 nms_rotated_cuda.cu(detectron2\detectron2\layers\csrc\nms_rotated\nms_rotated_cuda.cu) 5. 开始下载依赖库以及编译环境6.测…

【权威出版/投稿优惠】2024年智慧城市与信息化教育国际会议(SCIE 2024)

2024 International Conference on Smart Cities and Information Education 2024年智慧城市与信息化教育国际会议 【会议信息】 会议简称:SCIE 2024 大会时间:点击查看 大会地点:中国北京 会议官网:www.iacscie.com 会议邮箱&am…

Windows10安装Docker Desktop(实操步骤版)

1,下载Docker Desktop 官网下载地址: https://desktop.docker.com/win/stable/amd64/Docker%20Desktop%20Installer.exe 国内镜像下载地址(本人下载这个): https://smartidedl.blob.core.chinacloudapi.cn/docker/2…

MySQL经典面试题:谈一谈你对事务的理解

文章目录 📑事务事务的基本概念回滚开启事务的sql语句 事务的基本特性总结一下涉及到的三个问题 ☁️结语 📑事务 事务的基本概念 事务是用来解决一类特定场景的问题的,在有些场景中,完成某个操作,需要多个sql配合完…

三分钟了解绿色积分消费增值模式

在现今快速发展的经济环境中,绿色积分消费增值模式悄然在市场上崭露头角,引起了社会各界的广泛关注。这一模式起源于加密货币领域的单边上涨理念,经过精心改良,已经成功融入国内的产品盘项目中,展现出其独特的魅力和价…

嵌入式学习记录6.14(练习)

#include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);this->resize(1028,783); //设置左侧背景QLabel *lab1new QLabel(this);lab1->…

C语言期末考试大纲详解

一: C语言的基本概念 C语言是一种通用的、过程式的计算机编程语言,设计提供了低级内存访问和简单、灵活的语言结构。以下是关于C语言的一些基本概念和组成部分的详细解释。 文件扩展名 .c:这是C语言源代码文件的扩展名。它包含了程序员编…

Mysql学习笔记-SQL优化总结

详细内容参见https://blog.csdn.net/qingwufeiyang_530/article/details/139705898?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139705898%22%2C%22source%22%3A%22qingwufeiyang_530%22%7D

《全网首发》平衡三进制图灵机的构建

PS:以下内容均为本人原创,未经授权及许可,严禁引图、转载或加工,违者必究。 ————2024年6月13号 1、图灵机的概述 图灵机(Turing machine)是一种理论计算模型,由英国数学家阿兰图灵(Alan T…

定个小目标之刷LeetCode热题(16)

针对本题排序流程,主要是将链表拆分为长度为subLength的子链表1和子链表2,然后把子链表1和子链表2合并为一条有序链表,重复上述步骤直到把链表都拆分完,这样这条链表每段长度为2的子链表都是有序的,那么要整条链表有序…

鸿蒙求职面试内容总结——6月3日ZR的FS项目

最近接到了一些公司的入职面试邀约,这里略去公司的和项目的名字,做一些整理分享。 一、长列表如何实现部分渲染,使用的是哪一个API 在鸿蒙系统中,可以使用List组件来实现长列表的部分渲染。List组件支持使用条件渲染、循环渲染、…

快速LLaMA:面向大型语言模型的查询感知推理加速 论文摘要翻译与评论

论文摘要翻译与评论 论文标题: QuickLLaMA: Query-aware Inference Acceleration for Large Language Models 提出的框架 我们Q-LLM框架的示意图。来自记忆上下文的输入被分割成记忆块,通过查询感知的上下文查找来搜索与查询相关的块。目前的键值缓存…

怎么改公网IP?

在互联网时代,公网IP地址作为连接互联网的标识,对于个人用户和企业来说具有重要意义。公网IP有时会受到限制、安全性不高等问题,因此需要进行改变。本文将介绍几种常用的方法来改变公网IP。 更改路由器设置 大多数家庭和办公室网络都是通过…

【网络编程开发】17.“自动云同步“项目实践

17."自动云同步"项目实践 文章目录 17."自动云同步"项目实践项目简介功能需求需求分析实现步骤 1.实现TCP通信server.c 服务端tcp.hclient.c 客户端 函数封装tcp.ctcp.hserver.cclient.c编译运行 2.实现文件传输sever.cclient.ctcp.ctcp.hMakeifle编译运行…

LabVIEW常用的加密硬件

LabVIEW在工程和科学领域中广泛应用,其中数据保护和程序安全尤为重要。为了确保数据的安全性和完整性,常用的加密硬件设备包括TPM(可信平台模块)、HSM(硬件安全模块)和专用加密芯片。本文将推荐几款常用的加…

2012-2022年各省新质生产力指数数据(含原始数据+结果)

2012-2022年各省新质生产力指数数据(含原始数据结果) 1、时间:2012-2022年 2、指标:province、year、平均受教育年限、劳动者人力资本结构、高等院校在校学生结构、人均GDP元、在岗职工工资:元、三产从业人员比重、机…

力扣每日一题 6/11 暴力搜索

博客主页:誓则盟约系列专栏:IT竞赛 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 419.甲板上的战舰[中等] 题目: 给你一个大小为 m x n 的矩阵 b…

ADS基础教程21 - 电磁仿真(EM)模型的远场和场可视化

模型的远场和场可视化 一、引言二、操作步骤1.定义参数2.执行远场视图(失败案例)3.重新仿真提取参数 三、总结 一、引言 本文介绍电磁仿真模型的远场和场可视化。 二、操作步骤 1.定义参数 1)在Layout视图,工具栏中点击EM调出…

【数据库编程-SQLite3(二)】API-增删改查基础函数-(含源码)

学习分享 1、sqlite3_exec函数1.1、使用sqlite3_exec进行【查】操作1.1.1、callback函数 1.2、使用sqlite3_exec进行【增、删、改】操作 2、sqlite3_get_table函数2.1、使用sqlite3_get_table函数进行【查】操作 1、sqlite3_exec函数 1.1、使用sqlite3_exec进行【查】操作 由于…

XML Encoding = ‘GBK‘ after STRANS,中文乱码

最近帮同事处理了一个中信银行银企直连接口的一个问题,同事反馈,使用STRANS转换XML后,encoding始终是’utf-16’,就算指定了GBK也不行。尝试了很多办法始终不行,发到银行的数据中,中文始终是乱码。 Debug使用HTML视图…