当前位置: 首页 > news >正文

《计算机原理与系统结构》学习系列——计算机的算数运算(下)

系列文章目录


目录

  • 浮点数的表示和运算
  • 浮点数的表示
  • 浮点数的规格化
  • 浮点数标准
  • IEEE754
  • 浮点数表示范围
  • 浮点数的转换
  • 浮点数的运算
  • 浮点数加法
  • 浮点数加法的硬件实现
  •  精度
  • 浮点乘法
  • 浮点运算硬件 
  • MIPS中的浮点指令

浮点数的表示和运算

浮点数的表示

  • 表达非整型的数
    • 可以表达很小和很大的数
  • 和科学计数法类似
    • -2.34e56
    • +0.002e-4
    • +987.02*e9
  • 二进制表示
    • ±1.×××××× * 2的n次方
  • C语言中float和double

浮点数的规格化

为了表示非整数实数,现在的计算机广泛采用小数点浮动的浮点数,以-0.75为例子,首先转化为二进制实数,然后将二进制实数表示为以2为基数的科学计数法,这个过程称为规格化

这时候得到三个重要信息:1.实数的正负  2.小数点右边的尾数  3. 2的指数

浮点数标准

  • IEEE754 -1985标准
    • 消除表达的不一致性
    • 科学计算中的可移植性
  • 现在被普遍则采用的2种标准
    • 单精度(32-bit)
    • 双精度(64-bit)
    • IEEE

IEEE754

IEEE754规定,单精度浮点数大小为32位,其中最高1位是符号位(sign),随后8位是指数域(exponent),剩下全部表示尾数(fraction)

一般浮点数表达形式: 

F 为小数域的值, E 为指数域的值
 

浮点数表示范围

8位指数可以表示0~255共256个自然数,但是只有1~254表示真正的浮点数,为了方便比较大小,浮点数的指数域采用一种类似于移码的表示方法, 即1(0000 0001)~254(1111 1110)分别对应-126~+127,也就是说,算出真正阶数指数后,还要加上127的偏阶

故浮点数表达形式也可写成

浮点数的转换

  • 简单情况:如果除数是2的整数倍,则比较简单

  • 除数不是2的整数倍
    • 该数无法精确表示
    • 可能需要多位有效位来保证精度
    • 难点是如何得到有效位
  • 循环小数有个循环体
  • 转换
    • 求出足够多的有效位
    • 根据精度要求(单、双) 截断多余位
    • 按照标准要求给出符号位、阶和有效位


浮点数的运算

浮点数加法

运算步骤

  1. 先转化为二进制科学计数法
  2. 小对大,指数较小的数转化为指数较大的数的形式
  3. 再相加,列竖式相加
  4. 规格化,将和重新规格化
  5. 舍入查,四舍五入,检查是否发生指数溢出

对单精度,指数高于+127为上溢,低于-126为下溢


浮点数加法的硬件实现

  • 比整数复杂很多
  • 如果在一个时钟周期内完成,就会要求时钟周期非常的长
    • 比整数运算更费时
    • 较慢的时钟会对所有指令产生影响
  • 浮点加法器通常需要花费几个时钟周期
    • 可以被流水化

 

 


 精度

IEEE定义了多种舍入控制策略

  • 多存储几个位(舍入、保护、粘贴)
    • 保护位:在浮点数中间计算中,在右边多保留的两位以上的首位,用于提高传入精度
    • 舍入位:在右边多保留的两位中的第二位,使浮点中间结果满足浮点格式,得到最接近的数
    • 粘贴:末位始终为1,或末位为0舍1入
  • 可以选择不同的舍入模式
  • 允许程序员微调计算中的行为
  • 不是所有的硬件都实现了IEEE754的舍入策略
    • 大部分语言和类库只是使用了缺省的策略
  • 是硬件复杂度、效率和市场需求的折衷

浮点乘法

运算步骤

  1. 指数加:被乘数和乘数的指数相加(是真正指数,而不是加了偏阶的指数)
  2. 再相乘:列竖式相乘
  3. 规格化:将积重新规格化
  4. 舍入查:四舍五入,检查是否发生指数溢出
  5. 定符号:如果被除数和乘数反号,则符号位为1

 


浮点运算硬件 

  • 浮点乘法和加法的硬件复杂度类似
    • 有效位上进行乘法而不是加法
  • ​​​​浮点运算通常需要的操作是
    • 加法, 减法, 乘法, 除法, 求倒数, 平方根
    • 浮点数和整数间的转换
  • 通常需要多个时钟周期
    • 很容易用流水实现 

MIPS中的浮点指令

  • 浮点数使用协处理器
    • 通过ISA相连的协处理器
  • 独立的浮点寄存器
    • 32个单精度: $f0, $f1, $f31
    • 配对为双精度: $f0/$f1, $f2/$f3,
      • Release 2 of MIPs ISA supports 32 × 64-bit FP reg’s
  • 浮点指令只操作浮点寄存器
    • ​​​​​​​程序通常不会在浮点寄存器上进行整数操作,或在整数寄存器上进行浮点操作
    • 因此可以提供更多的寄存器,而不影响指令的长度
  • 浮点数读取、存储指令
    • ​​​​​​​​​​​​​​lwc1, ldc1, swc1, sdc1​​​​​​​
    • e.g. ldc1 $f8, 32($sp)
  • 单精度
    • ​​​​​​​​​​​​​​add.s, sub.s, mul.s, div.s
    • e.g. add.s $f0, $f1, $f6
  • ​​​​​​​双精度
    • add.d, sub.d, mul.d, div.d
    • e.g. mul.d $f4, $f4, $f6
  • 比较
    • ​​​​​​​c.xx.s, c.xx.d (xx is eq, lt, le, )
    • Sets or clears FP condition-code bit
      • e.g. c.lt.s $f3, $f4
  • 分支
    • bclt, bclf
    • e.g. bc1t TargetLabel

示例

float f2c (float fahr) {
  return ((5.0/9.0)*(
fahr - 32.0));
}

一个注意点

我们常用sll实现乘二的幂,但是用srl实现除二的幂会出现问题,对于无符号数是相同的,但是对于有符号,算数右移需要补入符号位才相同,如果补零则不同

 

相关文章:

《计算机原理与系统结构》学习系列——计算机的算数运算(下)

系列文章目录 目录 浮点数的表示和运算浮点数的表示浮点数的规格化浮点数标准IEEE754浮点数表示范围浮点数的转换浮点数的运算浮点数加法浮点数加法的硬件实现 精度浮点乘法浮点运算硬件 MIPS中的浮点指令 浮点数的表示和运算 浮点数的表示 表达非整型的数 可以表达很小和很大…...

二叉树进阶学习——从前序和中序遍历序列构造二叉树

1.题目解析 题目来源:105.从前序与中序遍历序列构造二叉树——力扣 测试用例 2.算法原理 首先要了解一个概念 前序遍历:按照 根节点->左子树->右子树的顺序遍历二叉树 中序遍历:按照 左子树->根节点->右子树的顺序遍历二叉树 题目…...

【数据分享】2000—2023年我国省市县三级逐年植被覆盖度(FVC)数据(Shp/Excel格式)

之前我们分享过2000—2023年逐月植被覆盖度(FVC)栅格数据(可查看之前的文章获悉详情)和Excel和Shp格式的省市县三级逐月FVC数据(可查看之前的文章获悉详情),原始的逐月栅格数据来源于高吉喜学者…...

【Python】Streamlit:为数据科学与机器学习打造的简易应用框架

Streamlit 是一个开源的 Python 库,专为数据科学家和机器学习开发者设计,旨在快速构建数据应用。通过简单的 Python 脚本,开发者无需掌握前端技术,即可将数据分析和模型结果转化为直观、交互式的 Web 应用。其简洁的 API 设计使得…...

OpenJudge | 置换选择排序

总时间限制: 1000ms 内存限制: 65536kB 描述 给定初始整数顺串,以及大小固定并且初始元素已知的二叉最小堆(为完全二叉树或类似完全二叉树,且父元素键值总小于等于任何一个子结点的键值),要求利用堆实现置换选择排序&a…...

如何提取b站的视频字幕,下载视频

打开视频地址 按F12打开—开发者工具 在开发者工具打开Network 过滤器关键字: 自动生成字幕:ai_subtitle 自制:json 打开/关闭字幕 刷新页面 找到字幕 点选字幕的respond 将方框中的内容复制; 复制到:https://www.drea…...

Vue中使用ECharts实现热力图的详细教程

在数据可视化领域,热力图是一种非常直观的表现形式,它通过颜色深浅来展示数据分布情况。在Vue项目中,我们可以使用ECharts这一强大的图表库来实现热力图。下面我将详细介绍如何在Vue中使用ECharts实现热力图。效果如下图: 一、准备…...

Arduino UNO R3自学笔记13 之 Arduino使用LM35如何测量温度?

注意:学习和写作过程中,部分资料搜集于互联网,如有侵权请联系删除。 前言:学习使用传感器测温。 1.LM35介绍 一般来讲当知道需求,就可以 通过既定要求的条件来筛选需要的器件,多方面的因素最终选定了器件…...

蓝桥杯【物联网】零基础到国奖之路:十六. 扩展模块之矩阵按键

蓝桥杯【物联网】零基础到国奖之路:十六. 扩展模块之矩阵按键 第一节 硬件解读第二节 CubeMX配置第三节 MDK代码 第一节 硬件解读 扩展模块和ADC模块是一摸一样的,插在主板上。 引脚对应关系: PB6-ROW1 PB7-ROW2 PB1-COLUMN1 PB0-COLUMN2 PA8-COLUMN3 …...

Apollo9.0 Planning2.0决策规划算法代码详细解析 (4): PlanningComponent::Proc()

🌟 面向自动驾驶规划算法工程师的专属指南 🌟 欢迎来到《Apollo9.0 Planning2.0决策规划算法代码详细解析》专栏!本专栏专为自动驾驶规划算法工程师量身打造,旨在通过深入剖析Apollo9.0开源自动驾驶软件栈中的Planning2.0模块&am…...

AAA Redis的过期删除策略+缓存雪崩+缓存一致性问题

目录 一、三种删除策略比较 二、缓存雪崩缓存击穿缓存穿透 三、缓存一致性 Redis学习笔记 一、三种删除策略比较 内存占用CPU占用特征定时删除节约内存,无占用不分时段占用CPU资源,频度高时间换空间惰性删除内存占用严重延时执行,CPU利用…...

成都跃享未来教育咨询有限公司抖音小店:引领教育咨询新风尚

在数字化浪潮席卷全球的今天,教育咨询行业正经历着前所未有的变革。成都跃享未来教育咨询有限公司,作为教育行业的一颗璀璨新星,凭借其前瞻性的教育理念与创新的运营模式,在抖音平台上开设了小店,不仅为广大学子及家长…...

【堆排】为何使用向下调整法建堆比向上调整法建堆更好呢?

文章目录 前言一、堆排代码一、计算使用向上调整法建堆的时间复杂度二、计算使用向下调整法插入的时间复杂度总结 前言 在博主的上一篇博客堆排(链接在这里点击即可)的总结中提出啦使用向下调整法建堆比使用向上调整法建堆更好,是因为使用向上调整法建堆的时间复杂…...

在Stable Diffusion WebUI中安装SadTalker插件时几种错误提示的处理方法

SD中的插件一般安装比较简单,但也有一些插件安装会比较难。比如我在安装SadTalker时,就遇到很多问题,一度放弃了,后来查了一些网上攻略,自己也反复查看日志,终于解决,不吐不快。 一、在Stable …...

使用ffmpeg合并视频和音频

使用ffmpeg合并视频和音频 - 哔哩哔哩 简介 FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec&#xff0…...

周末总结(2024/10/05)

工作 人际关系核心实践: 要学会随时回应别人的善意,执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己,抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内,职场社交不要放在5min以外 职场的人际关系在面对利…...

在Ubuntu中自动挂载SMB/CIFS共享

文章目录 0. 引言1. 使用credentials文件存储认证信息2. 挂载点的准备3. 必要软件的安装4. 调整挂载参数5. 测试挂载6. 日志调试 0. 引言 本文是自己挂载共享磁盘的实践记录,将详细介绍如何在Linux系统中配置自动挂载SMB/CIFS共享,并提供一些常见问题的…...

pWnOS2.0 靶机渗透( cms 渗透,php+mysql 网站渗透,密码碰撞)

pWnOS2.0 靶机渗透( ) 靶机介绍 vulnhub 靶机 本地搭建 由于靶机特性,靶机网卡位nat模式扫不到,原来需要改 nat 的地址 参考方法 https://blog.csdn.net/Bossfrank/article/details/131415257 作者主页 https://blog.csdn.net/Bossfrank?typeblog P…...

【AI】AIOT简介

随着技术的快速发展,人工智能AI和物联网IoT已经成为当今最热门的技术领域。AIOT是人工智能和物联网的结合,使物联网设备更加智能化,能够进行自主决策和学习的技术。 通过物联网产生、收集来自不同维度的、海量的数据存储于云端、边缘端&#…...

picgo + typora + gitee图床

Picgo打造个人图床,稳定又安全 解决Typora笔记上传到CSDN图片无法显示的问题 typora中...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...

聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇

根据 QYResearch 发布的市场报告显示&#xff0c;全球市场规模预计在 2031 年达到 9848 万美元&#xff0c;2025 - 2031 年期间年复合增长率&#xff08;CAGR&#xff09;为 3.7%。在竞争格局上&#xff0c;市场集中度较高&#xff0c;2024 年全球前十强厂商占据约 74.0% 的市场…...

Xcode 16 集成 cocoapods 报错

基于 Xcode 16 新建工程项目&#xff0c;集成 cocoapods 执行 pod init 报错 ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchro…...

[拓扑优化] 1.概述

常见的拓扑优化方法有&#xff1a;均匀化法、变密度法、渐进结构优化法、水平集法、移动可变形组件法等。 常见的数值计算方法有&#xff1a;有限元法、有限差分法、边界元法、离散元法、无网格法、扩展有限元法、等几何分析等。 将上述数值计算方法与拓扑优化方法结合&#…...