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

计算机组成原理——数据运算与运算器(二)

生活就像一条蜿蜒的河流,有时平静,有时湍急。我们在这条河流中前行,会遇到风雨,也会遇见阳光。重要的是,无论遇到什么,都要保持内心的平静与坚定。每一次的挫折,都是让我们成长的机会;每一次的成功,都是对努力的回报。不要急于求成,也不要轻易放弃,慢慢走,稳稳走,终会抵达属于自己的彼岸。

计算机组成原理资源网

https://www.wenjingketang.com/这里面有ppt课后习题及答案,需要的可以自行下载

目录

浮点运算

浮点加减法运算

浮点加法运算步骤

实例分析

注意事项

浮点乘除法运算

浮点乘法运算步骤

浮点除法运算步骤

实例分析

注意事项

算术逻辑单元

加法器

算术逻辑单元的功能和结构

定点运算器的基本结构

常见问题和易混淆知识点


浮点运算

浮点运算是计算机中用于表示和处理实数的一种数值计算方法。它通过指数和尾数的组合来表示一个数值,能够覆盖广泛的数值范围,并支持高精度计算。浮点数的标准格式由IEEE 754标准定义,主要包括单精度(32位)和双精度(64位)两种格式。每种格式包含三个主要部分:符号位(S)、指数(E)和尾数(M)。浮点数的一般表示形式为 (−1)S×M×2(E−bias)(−1)S×M×2(E−bias),其中符号位S决定了数值的正负,指数E用于确定数值的量级,而尾数M则提供了数值的精度。

浮点运算的优势在于其能够表示非常大或非常小的数值,同时保持较高的精度,因此在科学计算、工程模拟、图形渲染等领域被广泛应用。此外,浮点运算还支持标准化的数值交换和计算,促进了不同系统之间的兼容性。然而,浮点运算也存在一些局限性。首先是精度问题,由于浮点数的有限表示能力,某些数值不能被精确表示,导致舍入误差。其次是性能问题,浮点运算比定点运算更加复杂,硬件实现成本较高,计算速度相对较慢。因此,在设计系统时,需权衡浮点运算带来的高精度和灵活性与其实现的复杂性和性能损耗。

浮点加减法运算

浮点加减法运算是处理实数计算的重要组成部分,尤其在科学计算和工程应用中极为常见。这类运算的关键在于对齐两个操作数的指数部分,再进行尾数的加减操作,最后归一化结果并处理可能的舍入误差。了解浮点加减法运算的详细步骤及其注意事项对于确保计算的准确性和效率至关重要。

浮点加法运算步骤

浮点加法运算的基本步骤如下:

  1. 比较并调整指数:首先比较两个操作数的指数部分,将较小指数的操作数的尾数部分右移,使其指数与较大指数的操作数匹配。这一过程称为“对齐”。

  2. 执行尾数加法:对齐之后,对两个操作数的尾数部分进行加法操作。如果两个操作数有不同的符号位,实际上是在执行减法操作。

  3. 归一化结果:加法完成后,结果的尾数可能需要归一化。如果尾数部分产生了进位,则需要调整指数并将尾数右移一位;如果没有进位但尾数首位为0,则需要调整指数并将尾数左移。

  4. 舍入处理:由于浮点数的尾数部分是有限的,因此可能需要对结果进行舍入处理,以适应尾数的有效位数限制。常见的舍入模式包括四舍五入、向下取整、向上取整和向最近偶数舍入。

  5. 检测溢出和下溢:最后,检查结果是否超出了浮点数所能表示的最大或最小值范围,以确定是否发生了溢出或下溢。

实例分析

假设我们要计算两个单精度浮点数 A=1.5A=1.5 和 B=2.75B=2.75 的和。

  1. 转换为浮点数表示

    • A=1.5A=1.5 在二进制表示为 0∣01111111∣100000000000000000000000∣01111111∣10000000000000000000000
    • B=2.75B=2.75 在二进制表示为 0∣10000000∣011000000000000000000000∣10000000∣01100000000000000000000
  2. 比较并调整指数

    • 指数部分分别为 127127 和 128128,我们需要将 AA 的尾数右移一位,使其指数与 BB 匹配。
    • 调整后的 AA 为 0∣10000000∣010000000000000000000000∣10000000∣01000000000000000000000
  3. 执行尾数加法

    • 尾数部分相加:01000000000000000000000+01100000000000000000000=1010000000000000000000001000000000000000000000+01100000000000000000000=10100000000000000000000
  4. 归一化结果

    • 因为尾数部分产生了进位,我们将尾数右移一位,并将指数加1,得到 0∣10000001∣010000000000000000000000∣10000001∣01000000000000000000000
  5. 舍入处理

    • 在本例中,无需额外的舍入处理。

最终结果为 4.254.25,即 0∣10000001∣010000000000000000000000∣10000001∣01000000000000000000000。

注意事项

在进行浮点加减法运算时,有几个关键点需要注意:

  1. 对齐操作的复杂性:对齐操作可能会导致尾数部分的精度损失,特别是当两个操作数的指数差异较大时。
  2. 舍入误差:由于浮点数的有限表示能力,每次加法操作后都可能需要进行舍入处理,这会导致累积误差。
  3. 溢出和下溢:在归一化结果时,必须检查结果是否超出了浮点数的表示范围,以避免溢出或下溢。

浮点乘除法运算

浮点乘除法运算在计算机科学中扮演着至关重要的角色,特别是在需要处理实数运算的领域,如科学计算、图像处理和金融模型。与加减法运算相比,乘除法运算具有不同的特点和挑战,尤其是在处理指数和尾数的组合时。

浮点乘法运算步骤

浮点乘法运算的基本步骤如下:

  1. 处理符号位:首先,根据两个操作数的符号位确定结果的符号。如果两个操作数的符号相同,则结果为正;否则,结果为负。
  2. 指数相加:接下来,将两个操作数的指数部分相加,并减去偏置值(bias)。偏置值用于确保指数部分能够表示负数。
  3. 尾数相乘:然后,对两个操作数的尾数部分进行乘法操作。由于尾数部分通常表示为1加上一个小数部分,因此乘法结果也可能包含一个隐含的1。
  4. 归一化结果:乘法完成后,可能需要对结果进行归一化处理。如果乘法结果的尾数部分超过了可用的位数,则需要调整指数并将尾数右移。
  5. 舍入处理:由于尾数部分是有限的,可能需要对结果进行舍入处理,以适应尾数的有效位数限制。
  6. 检测溢出和下溢:最后,检查结果是否超出了浮点数所能表示的最大或最小值范围,以确定是否发生了溢出或下溢。
浮点除法运算步骤

浮点除法运算的基本步骤如下:

  1. 处理符号位:类似于乘法,根据两个操作数的符号位确定结果的符号。
  2. 指数相减:将被除数的指数减去除数的指数,并加上偏置值。
  3. 尾数相除:对两个操作数的尾数部分进行除法操作。由于尾数部分通常表示为1加上一个小数部分,因此除法结果也可能包含一个隐含的1。
  4. 归一化结果:除法完成后,可能需要对结果进行归一化处理。如果除法结果的尾数部分小于1,则需要调整指数并将尾数左移。
  5. 舍入处理:与乘法类似,可能需要对结果进行舍入处理。
  6. 检测溢出和下溢:最后,检查结果是否超出了浮点数所能表示的最大或最小值范围,以确定是否发生了溢出或下溢。
实例分析

假设我们要计算两个单精度浮点数 A=2.5A=2.5 和 B=1.25B=1.25 的乘积。

  1. 转换为浮点数表示

    • A=2.5A=2.5 在二进制表示为 0∣10000000∣010000000000000000000000∣10000000∣01000000000000000000000
    • B=1.25B=1.25 在二进制表示为 0∣01111111∣010000000000000000000000∣01111111∣01000000000000000000000
  2. 处理符号位

    • 两者均为正数,因此结果也为正数。
  3. 指数相加

    • AA 的指数为 128128,BB 的指数为 127127。相加后减去偏置值127,得到 128+127−127=128128+127−127=128。
  4. 尾数相乘

    • 尾数部分相乘:1.012×1.012=1.100121.012​×1.012​=1.10012​
  5. 归一化结果

    • 由于尾数部分没有超过可用位数,无需调整。
  6. 舍入处理

    • 在本例中,无需额外的舍入处理。

最终结果为 3.1253.125,即 0∣10000000∣100100000000000000000000∣10000000∣10010000000000000000000。

注意事项

在进行浮点乘除法运算时,有几个关键点需要注意:

  1. 指数计算的准确性:确保指数部分的计算准确无误,特别是考虑到偏置值的影响。
  2. 尾数计算的精度:尾数部分的乘除法可能会导致精度损失,特别是在处理非常大或非常小的数值时。
  3. 归一化处理:归一化是确保结果符合浮点数标准的关键步骤,需要仔细处理指数和尾数的关系。
  4. 舍入误差:由于浮点数的有限表示能力,每次乘除法操作后都可能需要进行舍入处理,这会导致累积误差。
  5. 溢出和下溢:在归一化结果时,必须检查结果是否超出了浮点数的表示范围,以避免溢出或下溢。

算术逻辑单元

算术逻辑单元(ALU, Arithmetic Logic Unit)是中央处理器(CPU)中的核心组件之一,负责执行基本的算术和逻辑运算。ALU的设计直接影响到计算机系统的性能和功能。理解ALU的工作原理及其内部结构有助于更好地掌握计算机体系结构的基础知识。

加法器

加法器是ALU中最基础也是最重要的部件之一,主要用于执行两个数值的加法运算。根据输入位数的不同,加法器可以分为半加器(Half Adder)、全加器(Full Adder)以及多位加法器等类型。

  • 半加器:只能处理两个单比特输入,并产生一个和(Sum)和一个进位(Carry)。它的真值表简单明了,但由于缺乏对前一位进位的处理能力,实际应用较少。

  • 全加器:不仅考虑当前两位的输入,还接收来自低位的进位输入,从而生成一个新的和及进位输出。全加器是构建多位加法器的基础模块。

  • 多位加法器:通过串联多个全加器形成,能够处理多位二进制数的加法运算。例如,一个8位加法器可以由8个全加器组成,每个全加器负责一位的加法运算。

为了提高加法器的速度和效率,现代计算机系统中常采用超前进位加法器(Carry-Lookahead Adder, CLA),它通过提前计算进位信号来减少延迟时间,从而加快整体运算速度。

算术逻辑单元的功能和结构

除了加法器外,ALU还包括其他类型的算术和逻辑运算单元,如减法器、乘法器、除法器、逻辑运算单元(AND, OR, NOT, XOR等)。这些单元共同构成了完整的ALU,使得CPU能够执行各种复杂的指令集。

ALU的核心功能包括但不限于以下几类:

  1. 算术运算:如加法、减法、乘法、除法等。
  2. 逻辑运算:如与、或、非、异或等布尔运算。
  3. 数据传输:如移动、复制数据等操作。
  4. 比较操作:如判断两个数是否相等、大小关系等。

ALU的结构通常由控制单元、输入寄存器、输出寄存器、运算单元等部分组成。控制单元负责解析指令并发送相应的控制信号给运算单元;输入寄存器存储待处理的数据;运算单元执行具体的算术或逻辑运算;输出寄存器则保存运算结果。

定点运算器的基本结构

定点运算器专门用于处理整数或固定小数点位置的数值运算。其基本结构与ALU相似,但更侧重于支持高效且精确的整数运算。典型的定点运算器包括加法器、减法器、乘法器、除法器等,它们通过组合使用可以完成复杂的数学计算任务。

为了优化性能,定点运算器通常会集成多种加速技术,如流水线设计、并行计算等。此外,为了提高精度和防止溢出,定点运算器还需要具备有效的溢出检测机制和饱和处理策略。

常见问题和易混淆知识点

在学习和应用计算机体系结构的过程中,经常会遇到一些概念容易混淆或难以理解的问题。以下是几个常见的例子及其解释:

  1. 定点运算 vs 浮点运算:定点运算适用于整数或固定小数点位置的数值,运算速度快但表示范围有限;浮点运算则能处理更大范围内的数值,但硬件实现更为复杂,运算速度较慢。选择哪种运算方式取决于具体的应用需求。

  2. 溢出 vs 下溢:溢出指的是运算结果超出了所使用的数据类型所能表示的最大值,导致高位丢失;下溢则是指结果太小以至于无法用当前数据类型表示,通常会被截断为零。正确理解和处理这两种情况对于保证计算的准确性至关重要。

  3. 舍入模式的选择:不同的舍入模式(如四舍五入、向零舍入、向上取整、向下取整等)会影响计算结果的精确度。选择合适的舍入模式应基于应用场景的具体要求。

  4. ALU与FPU的区别:ALU主要负责定点运算,而浮点处理单元(FPU, Floating Point Unit)专为浮点运算设计。尽管现代CPU中这两者常常集成在一起,但它们各自针对不同类型的数据进行优化。

相关文章:

计算机组成原理——数据运算与运算器(二)

生活就像一条蜿蜒的河流,有时平静,有时湍急。我们在这条河流中前行,会遇到风雨,也会遇见阳光。重要的是,无论遇到什么,都要保持内心的平静与坚定。每一次的挫折,都是让我们成长的机会&#xff1…...

SpringBoot+Vue的理解(含axios/ajax)-前后端交互前端篇

文章目录 引言SpringBootThymeleafVueSpringBootSpringBootVue(前端)axios/ajaxVue作用响应式动态绑定单页面应用SPA前端路由 前端路由URL和后端API URL的区别前端路由的数据从哪里来的 Vue和只用三件套axios区别 关于地址栏url和axios请求不一致VueJSPS…...

【AI】DeepSeek 概念/影响/使用/部署

在大年三十那天,不知道你是否留意到,“deepseek”这个词出现在了各大热搜榜单上。这引起了我的关注,出于学习的兴趣,我深入研究了一番,才有了这篇文章的诞生。 概念 那么,什么是DeepSeek?首先百…...

javascript-es6 (二)

函数进阶 函数提升 函数提升与变量提升比较类似,是指函数在声明之前即可被调用 好处:能够使函数的声明调用更灵活 函数提升出现在 相同作用域 当中 //可调用函数 fn()//后声明函数 function fn() {console.log(可先调用再声明) } 注意:函数表…...

供应链系统设计-供应链中台系统设计(十四)- 清结算中心设计篇(三)

关于清结算中心的设计,我们之前的两篇文章中,对于业务诉求的好的标准进行了初步的描述,如果没有看的同学可以参考一下两篇文章进行了解,这样更有利于理解本篇的内容。链接具体如下: 供应链系统设计-供应链中台系统设计…...

【自学笔记】MySQL的重点知识点-持续更新

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 MySQL重点知识点MySQL知识点总结一、数据库基础二、MySQL的基本使用三、数据类型四、触发器(Trigger)五、存储引擎六、索引七、事务处理八、…...

X86路由搭配rtl8367s交换机

x86软路由,买双网口就好。或者单网口主板,外加一个pcie千兆。 华硕h81主板戴尔i350-T2双千兆,做bridge下载,速度忽高忽低。 今天交换机到货,poe供电,还是网管,支持Qvlan及IGMP Snooping&#xf…...

Linux环境基础开发工具的使用(apt, vim, gcc, g++, gbd, make/Makefile)

目录 什么是软件包 Linux 软件包管理器 apt 认识apt 查找软件包 安装软件 如何实现本地机器和云服务器之间的文件互传 卸载软件 Linux编辑器 - vim vim的基本概念 vim下各模式的切换 vim命令模式下各指令汇总 vim底行模式个指令汇总 Linux编译器 - gcc/g gcc/g的作…...

多模态论文笔记——ViViT

大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细解读多模态论文《ViViT: A Video Vision Transformer》,2021由google 提出用于视频处理的视觉 Transformer 模型,在视频多模态领域有…...

搜索与图论复习1

1深度优先遍历DFS 2宽度优先遍历BFS 3树与图的存储 4树与图的深度优先遍历 5树与图的宽度优先遍历 6拓扑排序 1DFS&#xff1a; #include<bits/stdc.h> using namespace std; const int N10; int n; int path[N]; bool st[N]; void dfs(int u){if(nu){for(int i0;…...

【数据结构】初识链表

顺序表的优缺点 缺点&#xff1a; 中间/头部的插入删除&#xff0c;时间复杂度效率较低&#xff0c;为O(N) 空间不够的时候需要扩容。 如果是异地扩容&#xff0c;增容需要申请新空间&#xff0c;拷贝数据&#xff0c;释放旧空间&#xff0c;会有不小的消耗。 扩容可能会存在…...

第11章:根据 ShuffleNet V2 迁移学习医学图像分类任务:甲状腺结节检测

目录 1. Shufflenet V2 2. 甲状腺结节检测 2.1 数据集 2.2 训练参数 2.3 训练结果 2.4 可视化网页推理 3. 下载 1. Shufflenet V2 shufflenet v2 论文中提出衡量轻量级网络的性能不能仅仅依靠FLOPs计算量&#xff0c;还应该多方面的考虑&#xff0c;例如MAC(memory acc…...

deepseek+vscode自动化测试脚本生成

近几日Deepseek大火,我这里也尝试了一下,确实很强。而目前vscode的AI toolkit插件也已经集成了deepseek R1,这里就介绍下在vscode中利用deepseek帮助我们完成自动化测试脚本的实践分享 安装AI ToolKit并启用Deepseek 微软官方提供了一个针对AI辅助的插件,也就是 AI Toolk…...

深入理解Flexbox:弹性盒子布局详解

深入理解Flexbox&#xff1a;弹性盒子布局详解 一、Flexbox 的基本概念二、Flexbox 的核心属性1. display: flex2. flex-direction3. flex-wrap4. justify-content5. align-items6. flex 三、Flexbox 的实际应用1. 创建响应式三列布局2. 实现垂直居中3. 复杂布局的嵌套使用 四、…...

android Camera 的进化

引言 Android 的camera 发展经历了3个阶段 &#xff1a; camera1 -》camera2 -》cameraX。 正文 Camera1 Camera1 的开发中&#xff0c;打开相机&#xff0c;设置参数的过程是同步的&#xff0c;就跟用户实际使用camera的操作步骤一样。但是如果有耗时情况发生时&#xff0c;会…...

仿真设计|基于51单片机的氨气及温湿度检测报警

目录 具体实现功能 设计介绍 51单片机简介 资料内容 仿真实现&#xff08;protues8.7&#xff09; 程序&#xff08;Keil5&#xff09; 全部内容 资料获取 具体实现功能 &#xff08;1&#xff09;LCD1602液晶第一行显示当前的氨气值&#xff0c;第二行显示当前的温度…...

关于EDGE IMPULSE的使用与适配,包含如何学习部署在对应的板子

创建好账号后&#xff0c;可以打开主页新建一个工程 跳出这个选no就可以不用标label直接整张图训练&#xff0c;要更改可以去dashboard》labeling method改 然后在这个工程中选择添加自己的照片等数据&#xff0c;他支持这些格式的数据我们现在一般是用在openmv opencv yolo 等…...

【Python蓝桥杯备赛宝典】

文章目录 一、基础数据结构1.1 链表1.2 队列1.3 栈1.4 二叉树1.5 堆二、基本算法2.1 算法复杂度2.2 尺取法2.3 二分法2.4 三分法2.5 倍增法和ST算法2.6 前缀和与差分2.7 离散化2.8 排序与排列2.9 分治法2.10贪心法1.接水时间最短问题2.糖果数量有限问题3.分发时间最短问题4.采摘…...

数据结构 前缀中缀后缀

目录 前言 一&#xff0c;前缀中缀后缀的基本概念 二&#xff0c;前缀与后缀表达式 三&#xff0c;使用栈实现后缀 四&#xff0c;由中缀到后缀 总结 前言 这里学习前缀中缀后缀为我们学习树和图做准备&#xff0c;这个主题主要是对于算术和逻辑表达式求值&#xff0c;这…...

【cocos官方案例改】跳跃牢猫

自制游戏【跳跃牢烟】 案例解析 案例需求&#xff0c;点击鼠标控制白块左右。 资源管理器部分 在body创建一个2d精灵用作玩家。 在地下在创建一个2d精灵用来代表地面。 在body下挂在脚本。 全部脚本如下 &#xff08;在二次进行复刻时候&#xff0c;发现把代码复制上去无法…...

基于Python的药物相互作用预测模型AI构建与优化(上.文字部分)

一、引言 1.1 研究背景与意义 在临床用药过程中,药物相互作用(Drug - Drug Interaction, DDI)是一个不可忽视的重要问题。当患者同时服用两种或两种以上药物时,药物之间可能会发生相互作用,从而改变药物的疗效、增加不良反应的发生风险,甚至危及患者的生命安全。例如,…...

Day51:type()函数

在 Python 中&#xff0c;type() 是一个内置函数&#xff0c;用于返回对象的类型。它可以用于检查变量的类型&#xff0c;也可以用于动态创建新的类型。今天&#xff0c;我们将深入了解 type() 函数的使用方法。 1. 使用 type() 获取变量的类型 最常见的使用方式是将一个对象…...

因果推断与机器学习—用机器学习解决因果推断问题

Judea Pearl 将当前备受瞩目的机器学习研究戏谑地称为“仅限于曲线拟合”,然而,曲线拟合的实现绝非易事。机器学习模型在图像识别、语音识别、自然语言处理、蛋白质分子结构预测以及搜索推荐等多个领域均展现出显著的应用效果。 在因果推断任务中,在完成因果效应识别之后,需…...

计算机网络一点事(21)

第四章 网络层 功能&#xff1a;服务传输层&#xff0c;封装ip数据报&#xff08;主机到主机&#xff09; IP地址以32b表示&#xff0c;以8b为一组记十进制数 异构网络互连&#xff1a;网络结构&#xff0c;主机类型不同 路由器相互配合出IP数据报生成表&#xff0c;根据表…...

springboot使用rabbitmq

使用springboot创建rabbitMQ的链接。 整个项目结构如下&#xff1a; 1.maven依赖 <dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>3.4.1</version> </dependency>application.y…...

【微服务与分布式实践】探索 Eureka

服务注册中心 心跳检测机制&#xff1a;剔除失效服务自我保护机制 统计心跳失败的比例在15分钟之内是否低于85%&#xff0c;如果出现低于的情况&#xff0c;Eureka Server会将当前的实例注册信息保护起来&#xff0c;让这些实例不会过期。当节点在短时间内丢失过多的心跳时&am…...

Day48:获取字典键的值

在 Python 中&#xff0c;字典是一种无序的集合类型&#xff0c;它以键-值对的形式存储数据。字典的每个元素都有一个唯一的键&#xff0c;并且每个键都对应一个值。获取字典中的值是字典操作的常见任务&#xff0c;今天我们将学习如何从字典中获取键对应的值。 1. 使用方括号…...

Java锁自定义实现到aqs的理解

专栏系列文章地址&#xff1a;https://blog.csdn.net/qq_26437925/article/details/145290162 本文目标&#xff1a; 理解锁&#xff0c;能自定义实现锁通过自定义锁的实现复习Thread和Object的相关方法开始尝试理解Aqs, 这样后续基于Aqs的的各种实现将能更好的理解 目录 锁的…...

仿真设计|基于51单片机的温度与烟雾报警系统

目录 具体实现功能 设计介绍 51单片机简介 资料内容 仿真实现&#xff08;protues8.7&#xff09; 程序&#xff08;Keil5&#xff09; 全部内容 资料获取 具体实现功能 &#xff08;1&#xff09;LCD1602实时监测及显示温度值和烟雾浓度值&#xff1b; &#xff08;2…...

文件读写操作

写入文本文件 #include <iostream> #include <fstream>//ofstream类需要包含的头文件 using namespace std;void test01() {//1、包含头文件 fstream//2、创建流对象ofstream fout;/*3、指定打开方式&#xff1a;1.ios::out、ios::trunc 清除文件内容后打开2.ios:…...