浮点的加减计算方法

2023-11-01

1、计算步骤

浮点数格式:
单精度:符号位1位,阶码8位,尾数23位
双精度:符号位1位,阶码11位,尾数52位
阶码是移码表示
在这里插入图片描述
浮点数的加减运算的五个步骤:对阶、尾数运算、规格化、舍入(要求使用对偶舍入)(0舍1入)、溢出判断。
在这里插入图片描述
对阶:小阶向大阶转换,对完阶后浮点数组成为大阶码+尾数;尾数相加用新的尾数(包括低位移出的位数)

规格化:(保证小数点左右两边不同,可能规格化好几次)是指相加的尾数格式是否符合左规右规
右规:01.xxxx或者10.xxxx,将尾数连同符号位右移一位,和的阶加1,最终得到00.1xxxx或者11.0xxxx
左规:当尾数连同符号位为00.0xxxx或者11.1xxx(即小数点左右两位相同);将尾数连同符号位左移一位,和的阶减1

溢出:部分符号位01或者10 不溢出(即阶码的符号位中出现01或者10时才溢出);尾数的符号位中出现01或者10时右规

2、基本要素

2.1 浮点数

浮点数即实数,实数是所有有理数和无理数的集合。它之所以被称作浮点数,是因为小数点在数中的位置并不是固定的。一个浮点数值分为两部分存储:数值以及小数点在数值中的位置。

2.2 规格化浮点数

IEEE 754浮点数的尾数总是规格化的,其范围为1.000…0 × 2e~ 1.111…1 × 2 e ,e为指数。
规格化浮点数的最高位总是1,规格化使尾数的所有位都是有效的,因而尾数精度更高。
如:0.10… × 2 e规 格 化 为 1.10… × 2 e-1
10.1… 2 e 规 格 化 为 1.01… × 2 e+1
尾数规格化充分利用了可用的最大精度。如,一个8位非规格话的尾数0.0000101只有4位有效位,而规格化后的8位尾数1.0100011则有8位有效位。

2.3 偏置指数

IEEE 754浮点数的尾数被表示为符号及值的形式,即用一个符号位表示它是正数还是负数。它的指数则用偏置方式表示(即阶码是移码表示),即给真正的指数加上一个常数。
其他的浮点详细信息可见:浮点的表示方法
已知32位单精度浮点数的指数部分是8位,则偏置值为127。如果一个数的指数为0,则被保存为 0+127=127。如果指数为-2,则被保存为− 2 + 127 = 125 。如果指数为-1,则被保存为− 1 + 127 = 126 。
实数1010.1111规格化的结果为1.010111 × 2 3 ,指数为3,将被保存为3 + 127 = 130 。
这种用偏置表示指数的方法优点在于:最小的负指数被表示为0,如果不采用这种方法,0的浮点表示为0.0…0×2{最小负指数},采用偏置指数。0就可以用尾数0和指数0表示:
在这里插入图片描述

2.4 IEEE浮点数

在这里插入图片描述
一个32位IEEE 754单精度浮点数可以被表示为下面的二进制串:
S EEEEEEEE 1.MMMMMMMMMMMMMMMMMMMMMMM

S为符号位,指明这个数是正数还是负数
E为8位偏置指数,指出了小数点的位置
M为23位尾数

IEEE浮点数的尾数总是规格化的,其值范围在1.0000…00 − 1.1111…11 1.0000…00-1.1111…111.0000…00−1.1111…11 ,除非这个浮点数是0,此时尾数为0.000…00 0.000…000.000…00。

由于尾数总是规格化的,且最高位总是为1,因此将尾数存入存储器时没有必要保存最高位的1。所以,一个非0的IEEE 754浮点数可被定义为:X = ( − 1 ) S × 2^E − B^ × 1. F X,其中:

S符号位
E:偏置量为B的指数
F:尾数的小数部分(实际的尾数为1.F,有个隐含的1)
ps:浮点数0被表示为S=0,E=0,M=0(即浮点数0用全0表示)

在32位IEEE 754单精度浮点数格式中,最大指数E_{max}为127,最小指数E_{min}为-126,而不是−127至128。E_{min} -1(即-127)用来表示浮点0,E_{max} +1(即128)用来表示正/负无穷大或NaN数。
tips:nan是计算机科学中数值数据类型的一类值,表示未定义或不可表示的值。常在浮点数运算中使用,是以浮点数表示实数时的特殊值。
下图,描述了IEEE单精度浮点数格式,指数E=0和E=255等特例分别被用于表示浮点0,非规格化效数、正/负无穷大、以及NaN:
在这里插入图片描述

2.5 特点

(1)浮点数接近0时的特点,下图描述了一个指数2位,尾数为2位的浮点数系统。浮点数0表示00 000,下一个规格化的正数表示为00 100(即2−b× 1.00 ,b为偏置常数):
在这里插入图片描述
浮点数0附近有一块禁止区,其中的浮点数都是非规格化的,因此无法被表示为IEEE标准格式。这个数的指数和起始位都是0的区域,也可用来表示浮点数。但是这些数都是非规格化的,其精度比规格化的精度低,会导致渐进式下溢。
(2)IEEE标准规定,缺省的舍入技术应该向最近的值舍入。
(3)IEEE标准规定了4种比较结果,分别是等于、小于、大于和无序,无序用于一个操作数是NaN数的情景。
(4)IEEE标准规定了5种异常:

1.操作数不合法:使用了一些不合法的操作数:NaN数、无穷大数、求负数的平方根(这里不必考虑)。
2.除数为0(这里是加法器,所以不需要考虑)
3.上溢:当结果比最大浮点数还大时,处理上溢的方法有终止计算和饱和运算(用最大值作为结果)等
4.下溢:当结果比最小浮点数还小时,处理下溢的方法有将最小浮点数设为0或用一个小于 2^{E_{min}}^ 的非规格化数表示最小浮点数等方式处理。
5.结果不准确:当某个操作产生舍入错误时。

3、计算实例

由于IEEE标准下的浮点操作数已被表示为规格化形式,计算机在进行浮点加法时,为了对齐指数,计算机必须执行下面步骤:
第一步,找出指数较小的数
第二部,使两个数的指数相同
第三步,尾数相加
第四步,如果有必要,将结果规格化
以一个简单的8位尾数和一个未对齐的指数为例说明浮点运算,A = 1.0101001 × 24 , B=1.1001100×23,计算A+B
在这里插入图片描述
注意:
(1)因为IEEE754标准的32位单精度浮点数的指数与尾数位于位于同一个字中,所以在加法过程开始之前必须将它们分离开。
(2)如果两个指数的差大于p+1,p为尾数的位数,这里p=23,较小的数由于太小而无法影响较大的数,结果实际就等于较大的数。
(3)结果规格化时检查指数范围,以分别检测指数下溢或上溢。指数下溢会导致结果为0,而指数上溢出会造成错误。
浮点加法运算的流程图
在这里插入图片描述

4、舍入机制

浮点运算可能引起尾数位数的相加,需要保持尾数位数不变的方法。最简单的技术叫作截断
比如将0.1101101截断为4位尾数的结果为0.1101。截断会产生诱导误差(即误差是由施加在数上的操作计算所引起的),诱导误差是偏差的,因为截断后的数总比截断数小。

舍入是一种更好的减少数的尾数的技术。如果舍弃的位的值大于剩余数的最低位的一半,将剩余数的最低位+1。
比如:
在这里插入图片描述
要找到中间值,先确定要保留的有效数字,找到要保留的有效数字最低位的下一位。如果这位是进制的一半,而且之后的位数都为 0,则这个值就是中间值。

舍入到最近的偶数例子:
十进制的 1.2500,要保留到小数点后一位,下一位是 5,是进制的一半,后面位数都为 0,所以这个值就是中间值
二进制的 10.0110,要保留到小数点后两位,下一位是 1,是进制的一半,后面位数都为 0,所以这个值就是中间值
知道了舍入规则之后(舍弃的位的值大于剩余数的最低位的一半),
看几个具体的例子,以二进制为例,有效位数保留到小数点后两位(保留两位数的话,0.xx1是余数的最低位的一半)。
10.00_011,中间值为 10.00100,小于中间值,向下舍入为 10.00
10.00_110,中间值为 10.00100,大于中间值,向上舍入为 10.01
10.11_100,中间值为 10.11100,等于中间值,要保留的最低有效位 1 为奇数,向上舍入为 11.00
10.10_100,中间值为 10.10100,等于中间值,要保留的最低有效位 0 为偶数,向下舍入为 10.10

舍入机制
(1)最简单的舍入机制是截断或向0舍入。
(2)向最近的数舍入:选择距离该数最近的那个浮点数作为结果。
(3)向正或负无穷大舍入:选择正或负无穷大方向上最近的有效浮点数作为结果。
(4)向偶数舍入:当要舍入的数位于两个连续浮点数的正中时,IEEE舍入机制选择最低位为0的点(即向偶数舍入)
详细信息见IEEE754标准中的4种舍入模式

舍入的规则需要区分三种情况:
当具体的值大于中间值的时候,向上舍入
当具体的值小于中间值的时候,向下舍入
当具体的值等于中间值的时候,向偶数舍入。向偶数舍入指的是要保留的最低有效位为偶数,具体规则:
要保留的最低有效位如果为奇数,则向上舍入
要保留的最低有效位如果为偶数,则向下舍入

扩展:乘除计算步骤

浮点乘法:
1.阶码相加
2.尾数相乘
3.规格化
4.判断溢出

浮点除法:
1.阶码相减
2.尾数相除
3.规格化
4.判断溢出

参考的浮点加法器代码的文章:
Verilog浮点加法器设计项目地址:https://github.com/Candyroot/Floating-Point-Addition
浮点数加法器设计(含代码)
重要文章
《CSAPP》读书笔记 – 第2章:浮点数原理(小专题)

备注:该内容为读书笔记,部分内容与图片收集来源于网络,如有侵权或错误,请联系我整改,谢谢!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浮点的加减计算方法 的相关文章

  • 【详解】指令系统中跳转指令与OF,SF,CF,ZF的关系

    目录 无符号跳转表示法 有符号跳转表示法 无符号跳转表示法详解 有符号跳转表示法详解 无符号跳转表示法 小于 大于等于 小于等于 大于 有符号跳转表示法 小于 大于等于 小于等于 大于 无符号跳转表示法详解 我在学习这部分的最大的困惑点就是
  • 学生正版Altium Designer许可证到期怎么再申请

    学生如何使用正版Altium Designer软件 适用于老师 学生 校友等等 目录 一 前情提要 二 许可证延期步骤 2 1 重要前提 2 2 许可证申请 2 3 申请完成 一 前情提要 如果不知道怎么安装学生版AD 可点击以下链接学生如
  • 数字万用表的使用

    参考 连3岁小孩子都能看懂的万用表使用方法 地址 https www bilibili com video BV1Gx411z7x2 p 1 vd source cc0e43b449de7e8663ca1f89dd5fea7d 目录 万用表
  • 计算机组成原理--基于Logisim的海明校验码解码电路实验的应用(超详细/设计/实验/作业/练习)

    目录 课程名 计算机组成原理 内容 作用 设计 实验 作业 练习 学习 基于Logisim的海明校验码解码电路 一 前言 二 环境与设备 三 内容 四 结果与分析 课程名 计算机组成原理 内容 作用 设计 实验 作业 练习 学习 基于Log
  • 补码加减运算及判断溢出方法

    一 补码加减运算 二 判断溢出方法 1 符号位判溢出方法 对于加减运算 两个异号数相加或者两个同号数相减 结果的绝对值一定比任何一个数的绝对值要小 不会发生上溢出 两个异号数相减或者两个同号数相加的绝对值肯定比任何一个数要大 可能发生溢出
  • 【计算机组成原理】总线宽度和总线带宽的区别,总线带宽的计算

    总线宽度 总线的宽度 指总线在单位时间内可以传输的数据总数 即平常说的32位 64位 总线宽度 总线位宽 数据线的根数 总线带宽 总线带宽 指总线在单位时间内可以传输的数据总数 等于总线的宽度与工作频率的乘积 通常单位 MB s MBps
  • 模块电路选型(7)----人机交互模块

    系列文章目录 1 电源模块 2 主控模块 3 传感器模块 4 通信模块 5 电机驱动模块 6 存储模块 7 人机交互模块 文章目录 前言 一 按键 1 触摸按键 前言 送给大学毕业后找不到奋斗方向的你 每周不定时更新 牛客网 构建从学习到职
  • UPF与低功耗设计实现实例 -- 附UPF与DC综合脚本

    原文链接 https www eefocus com industrial electronics 473034 本文摘自 数字集成电路低功耗物理实现技术与 UPF 孙轶群 sun yiqun nationz com cn 国民技术股份有限
  • Allegro输出带等长规则的Excel操作指导

    Allegro输出带等长规则的Excel操作指导 Allegro可以输出带等长规则的Excel文件 方便检查和查阅 具体操作如下 打开规则管理器 选择Relative Propagation Delay 选择需要输出的match group
  • 计算机组成原理期末复习【超实用】

    计算机组成原理 第二版 唐朔飞 编著 课本有些地方还不错 可以下载电子版看看 b站2小时讲解链接 https www bilibili com video BV1x4411q7Fz 初次录讲解视频 各种差错和画音不同步请各位谅解 我录到后面
  • 第一章 计算机系统概论

    一 计算机系统简介 1 计算机软硬件概念 计算机是一种能够执行指令的电子设备 它由硬件和软件两部分组成 计算机硬件是指计算机系统中的物理组件 包括中央处理器 CPU 内存 硬盘 输入设备 如键盘 鼠标 输出设备 如显示器 打印机 等 这些硬
  • EMC经典问答85问(75-77问)

    75 某个手持测试产品 可以电池供电 同时也可以采取外置适配器供电方式 适配器单独带负载辐射发射 RE 测试可以通过 手持产品在电池供电情况下辐射发射 RE 也可以通过 并且余量都比较大 但是在带外置适配器的情况下 却在 160M 频率左右
  • 直流-直流(DC-DC)变换电路

    直流 直流 DC DC 变换电路 可以将一种直流电源经过变换电路后输出另一种具有不同输出特性的直流电源 可以是一种固定电压或可调电压的直流电 按照电路拓扑结构的不同 DC DC变换电路可以分成两种形式 不带隔离变压器的DC DC变换电路和带
  • AD20/Altium designer——如何对PCB添加图片丝印、自定义LOGO、专属图案

    本篇介绍如何在PCB添加图案丝印并调节大小 主要步骤 图片转单色图 bmp格式 复制粘贴进word文档 再次复制到AD 1 选择图片用电脑自带的画图软件打开 2 将图片另存为 bmp格式 3 查看图片效果是否理想 图片是否需要取反色 选做
  • 【零基础玩转BLDC系列】基于反电动势过零检测法的无刷直流电机控制原理

    无刷直流电动机基本转动原理请参考 基于HALL传感器的无刷直流电机控制原理 基本原理及基础知识本篇不再赘述 目录 反电势过零检测法的原理 反电势过零检测实现方法 位置传感器的存在限制了无刷直流电机在某些特定场合中的应用 如 使电机系统的体积
  • 硬件系统工程师宝典(30)-----降压式Buck电路分析

    各位同学大家好 欢迎继续做客电子工程学习圈 今天我们继续来讲这本书 硬件系统工程师宝典 上篇我们说到DC DC变换中的开关调节模式有功耗小 效率高并且稳压范围宽的特点以及DC DC的指标参数和设计要求 今天我们来分析一下DC DC中的一个典
  • 西门子300系列基本逻辑编程:手自动选择程序及自定义脉冲模块的使用

    西门子内置脉冲发生器 M0 0 0 1S M0 1 0 2S M0 2 0 4S M0 3 0 5S M0 4 0 8S M0 5 1 0S M0 6 1 6S M0 7 2 0S 案例 手自动选择程序 控制要求 I0 0是手自动选择开关
  • ADS Via Designer 快速建模举例

    如何快速地对设计中的差分过孔进行建模 是layout前仿真中经常遇到的问题 好在目前主流的仿真软件都提供了独立的过孔建模向导 可以很方便地进行操作 本文以ADS提供的Via Designer向导为例 展示如何快速完成过孔的建模操作 以下图所
  • 1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

    1 69寸SPI接口240 280TFT液晶显示模块使用中碰到的问题说明并记录一下 在网上买了1 69寸液晶显示模块 使用spi接口 分辨率240 280 给的参考程序是GPIO模拟的SPI接口 打算先移植到FreeRtos测试 再慢慢使用
  • 48V转12V的DC-DC稳压电路推荐

    项目或学习过程中好用且稳定的DC DC的电路将是一个成功硬件项目的基础 主芯片 MP9486 MP9486A 是一款高压降压型开关稳压器 可输 出高达 1A 的持续电流至负载 它集成了一个高 压高端 MOSFET 提供 3 5A 的典型峰值

随机推荐

  • upload-labs(11~12)通关笔记

    环境准备 1 php版本 lt 5 3 4 2 magic quotes gpc Off php我用的是upload labs官方推荐的5 2 17 搭建平台用的是phpStudy2018 修改magic quotes gpc magic
  • Java实现邮件发送功能

    确定发件人邮箱和密码 某些邮箱服务器为了增加邮箱本身密码的安全性 给 SMTP 客户端设置了独立密码 有的邮箱称为 授权码 对于开启了独立密码的邮箱 这里的邮箱密码必需使用这个独立密码 授权码 确认发件人邮箱的 SMTP 服务器地址 发件人
  • python人工智能:模型关系(泉舟时代)

    1 授课 林德尧 泉舟时代 未来城市技术总监 2 主要文章内容 通常下 Flask SQLAlchemy 的行为就像一个来自 declarative 扩展配置正确的 declarative 基类 因此 我们强烈建议您阅读 SQLAlchem
  • 《机器学习》Chapter 5 神经网络笔记

    机器学习 Chapter 5 神经网络 1 神经元模型 神经元接收到来自n个其它神经元传递过来的输入信号 这些输入信号通过带权重的连接进行传递 神经元接收到的总输入值将与神经元的阈值进行比较 然后通过激活函数处理以产生神经元的输出 2 感知
  • 使用css去除input边框

  • 不同CUDA版本对应的最小GPU运算能力和最低兼容驱动

    The minimum compute capability for various CUDA versions CUDA Version Minimum Compute Capability Default Compute Capabil
  • 使用 Python 进行游戏脚本编程 [翻译]

    翻译自 GDC 2002 上 Bruce Dawson 的 Game Scripting in Python 简单介绍 Python 作为游戏脚本语言的优势 原文 Game Scripting in Python 作者 Bruce Daws
  • 机器学习的环境搭建流程

    一 需要 python解释器 pycharm anaconda 机器学习需要的第三方包 二 流程 1 先确定进行机器学习需要的主要包之间的依赖关系及对应的python版本 建议python版本不要太高 3 6或者3 7比较好 因为许多第三方
  • 后端进阶之路——综述Spring Security认证,授权(一)

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 前端炫酷代码分享 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架构咱们从0说 数据流通的精妙之道 后端进阶之路 文章
  • 【华为OD机试真题 Python】最左侧冗余覆盖子串

    前言 本专栏将持续更新华为OD机试题目 并进行详细的分析与解答 包含完整的代码实现 希望可以帮助到正在努力的你 关于OD机试流程 面经 面试指导等 如有任何疑问 欢迎联系我 wechat steven moda email nansun09
  • 简单的编写一个通讯录并可进行增删改查功能

    改通讯录分为三个模块 test c contact c contact h 下面依次给我相应的代码 有想问的或者觉得有帮助的帮忙点个赞和关注一下哈 蟹蟹 主要用到了结构体指针来进行对结构体的修改查找之类的算法 test c define C
  • iOS 底层解析weak的实现原理

    参考地址 http www cocoachina com ios 20170328 18962 html weak 实现原理的概括 Runtime维护了一个weak表 用于存储指向某个对象的所有weak指针 weak表其实是一个hash 哈
  • 深度学习之---yolov1,v2,v3详解

    写在前面 如果你想 run 起来 立马想看看效果 那就直接跳转到最后一张 动手实践 看了结果再来往前看吧 开始吧 一 YOLOv1 简介 这里不再赘述 之前的我的一个 GitChat 详尽的讲述了整个代码段的含义 以及如何一步步的去实现它
  • 【数字转换为汉字】

    项目场景 通常这种情况下 后端返回是数组 如果想要把数组这样显示出来 就需要把数组的索引值转换为汉字显示 如 11显示为十一 21显示为二十一 实现代码讲解 NoToChinese num 如果传递过来的值不是数据类型 则直接报错 if d
  • 蓝桥杯C/C++省赛:振兴中华

    目录 题目描述 思路分析 AC代码 题目描述 小明参加了学校的趣味运动会 其中的一个项目是 跳格子 地上画着一些格子 每个格子里写一个字 如下所示 从我做起振 我做起振兴 做起振兴中 起振兴中华 比赛时 先站在左上角的写着 从 字的格子里
  • Vue_shop(Element-UI)优化打包上线

    自己从头到尾打的源码链接 https gitee com bai xianger vue shop 一 项目的打包优化 1 网页顶部添加进度条效果 安装运行依赖nprogresst 链接 https github com rstacruz
  • 1053. 交换一次的先前排列

    转载请声明地址四元君 1053 交换一次的先前排列 题目难度 Medium 给你一个正整数的数组 A 其中的元素不一定完全不同 请你返回可在 一次交换 交换两数字 A i 和 A j 的位置 后得到的 按字典序排列小于 A 的最大可能排列
  • 无向图的广度优先遍历和深度优先遍历

    public class MGraph private char vexs 顶点 private int edge 存储边的二维数组 private int arcNum 边的数目 private boolean visited 访问标志数
  • Java学习笔记 类的特性:拓展知识与案例

    1 this的使用 使用场合 从一个构造方法调用到另一个构造方法 作用 缩短程序代码 减少开发程序时间 规则 通过关键字this来调用 this必须写在构造方法的第一行位置 在圆柱体类Cylinder里 用一个构造方法调用另一个构造方法 c
  • 浮点的加减计算方法

    浮点的计算方法 1 计算步骤 2 基本要素 2 1 浮点数 2 2 规格化浮点数 2 3 偏置指数 2 4 IEEE浮点数 2 5 特点 3 计算实例 4 舍入机制 扩展 乘除计算步骤 1 计算步骤 浮点数格式 单精度 符号位1位 阶码8位