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

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

计算机组成原理资源网

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中这两者常常集成在一起,但它们各自针对不同类型的数据进行优化。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器虚拟化实战:架构、技术与最佳实践

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 1. 引言 服务器虚拟化是现代 IT 基础设施的重要组成部分,通过虚拟化技术可以提高服务器资源利用率、降低硬件成本&am…

【LLM】Ollama框架入门指北

note Ollama是一个开源框架,专门设计用于在本地运行大型语言模型。它的主要特点是将模型权重、配置和数据捆绑到一个包中,从而优化了设置和配置细节,包括GPU使用情况,简化了在本地运行大型模型的过程。Ollama提供了对模型量化的支…

Linux系统:Ubuntu替换镜像源具体方法;

在Linux系统更新下载软件时,如遇因镜像源问题下载失败时,我们就需要替换系统原有镜像源,那么,此时,你是否还在百度四处搜索可以用的镜像源地址,然后反复去测试源地址的正确性呢,下面介绍一个亲测…

使用vhd虚拟磁盘安装两个win10系统

使用vhd虚拟磁盘安装两个win10系统 前言vhd虚拟磁盘技术简介准备工具开始动手实践1.winX选择磁盘管理2.选择“操作”--“创建VHD”3.自定义一个位置,输入虚拟磁盘大小4.右键初始化磁盘5.选择GPT分区表格式6.右键新建简单卷7.给卷起个名字,用于区分8.打开…

HTML(快速入门)

欢迎大家来到我的博客~欢迎大家对我的博客提出指导,有错误的地方会改进的哦~点击这里了解更多内容 目录 一、前言二、HTML基础2.1 什么是HTML?2.2 认识HTML标签2.2.1 HTML标签当中的基本结构2.2.2 标签层次结构 2.3 HTML常见标签2.3.1 标题标签2.3.2 段落标签2.3.3…

d3.js: Relation Graph

d3.js Tags d3/d3 GitHub D3 by Observable | The JavaScript library for bespoke data visualization 下载或 <!-- 引入 D3.js 库 --> <script src"https://d3js.org/d3.v7.min.js"></script> <!-- 引入 D3.js 库 --> <…

Oracle Primavera P6自动进行进度计算

前言 在P6 Professional 有一个自动计划计算的选项&#xff0c;很多人不了解该设置如何使用&#xff0c;以及什么时候该启动这项配置。 详情 P6 Professional 默认为非自动进度计算。启用自动选项后&#xff0c;可以快速查看调度更改的效果。 ​ ​ 如图所示&#xff0c;当你…

反射、枚举以及lambda表达式

一.反射 1.概念&#xff1a;Java的反射&#xff08;reflection&#xff09;机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意方法和属性&#xff0c;既然能拿到那么&am…

【Proteus仿真】【51单片机】简易计算器系统设计

目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 联系作者 一、主要功能 1、LCD1602液晶显示 2、矩阵按键​ 3、可以进行简单的加减乘除运算 4、最大 9999*9999 二、使用步骤 系统运行后&#xff0c;LCD1602显示数据&#xff0c;通过矩阵按键…

HarmonyOS简介:HarmonyOS核心技术理念

核心理念 一次开发、多端部署可分可合、自由流转统一生态、原生智能 一次开发、多端部署 可分可合 自由流转 自由流转可分为跨端迁移和多端协同两种情况 统一生态 支持业界主流跨平台开发框架&#xff0c;通过多层次的开放能力提供统一接入标准&#xff0c;实现三方框架快速…

(即插即用模块-特征处理部分) 十九、(NeurIPS 2023) Prompt Block 提示生成 / 交互模块

文章目录 1、Prompt Block2、代码实现 paper&#xff1a;PromptIR: Prompting for All-in-One Blind Image Restoration Code&#xff1a;https://github.com/va1shn9v/PromptIR 1、Prompt Block 在解决现有图像恢复模型时&#xff0c;现有研究存在一些局限性&#xff1a; 现有…

Day24-【13003】短文,数据结构与算法开篇,什么是数据元素?数据结构有哪些类型?什么是抽象类型?

文章目录 13003数据结构与算法全书框架考试题型的分值分布如何&#xff1f; 本次内容概述绪论第一节概览什么是数据、数据元素&#xff0c;数据项&#xff0c;数据项的值&#xff1f;什么是数据结构&#xff1f;分哪两种集合形式&#xff08;逻辑和存储&#xff09;&#xff1f…

使用 MSYS2 qemu 尝鲜Arm64架构国产Linux系统

近期&#xff0c;我的师弟咨询我关于Arm64架构的国产CPU国产OS开发工具链问题。他们公司因为接手了一个国企的单子&#xff0c;需要在这类环境下开发程序。说实在的我也没有用过这个平台&#xff0c;但是基于常识&#xff0c;推测只要基于C和Qt&#xff0c;应该问题不大。 1. …

unity学习21:Application类与文件存储的位置

目录 1 unity是一个跨平台的引擎 1.1 使用 Application类&#xff0c;去读写文件 1.2 路径特点 1.2.1 相对位置/相对路径&#xff1a; 1.2.2 固定位置/绝对路径&#xff1a; 1.3 测试方法&#xff0c;仍然挂一个C#脚本在gb上 2 游戏数据文件夹路径&#xff08;只读&…

【Redis】hash 类型的介绍和常用命令

1. 介绍 Redis 中存储的 key-value 本身就是哈希表的结构&#xff0c;存储的 value 也可以是一个哈希表的结构 这里每一个 key 对应的一个 哈希类型用 field-value 来表示 2. 常用命令 命令 介绍 时间复杂度 hset key field value 用于设置哈希表 key 中字段 field 的值为…

基于51单片机和WS2812B彩色灯带的流水灯

目录 系列文章目录前言一、效果展示二、原理分析三、各模块代码四、主函数总结 系列文章目录 前言 用彩色灯带按自己想法DIY一条流水灯&#xff0c;谁不喜欢呢&#xff1f; 所用单片机&#xff1a;STC15W204S &#xff08;也可以用其他1T单片机&#xff0c;例如&#xff0c;S…

力扣017_最小覆盖字串题解----C++

题目描述 我们可以用滑动窗口的思想解决这个问题。在滑动窗口类型的问题中都会有两个指针&#xff0c;一个用于「延伸」现有窗口的 r 指针&#xff0c;和一个用于「收缩」窗口的 l 指针。在任意时刻&#xff0c;只有一个指针运动&#xff0c;而另一个保持静止。我们在 s 上滑动…

如何从客观角度批判性阅读分析博客

此文仅以个人博客为例&#xff0c;大量阅读朋友反馈给我的交流让我得知他们所理解我的博客所表达的意思并非我所想表达的&#xff0c;差异或大或小&#xff0c;因人而异。 观点与事实 只有从客观角度反复批判性阅读和分析&#xff0c;才能逐渐清晰观点和事实。 观点不等于事实…

深入理解MySQL 的 索引

索引是一种用来快速检索数据的一种结构, 索引使用的好不好关系到对应的数据库性能方面, 这篇文章我们就来详细的介绍一下数据库的索引。 1. 页面的大小: B 树索引是一种 Key-Value 结构&#xff0c;通过 Key 可以快速查找到对应的 Value。B 树索引由根页面&#xff08;Root&am…

Spring Boot项目如何使用MyBatis实现分页查询及其相关原理

写在前面&#xff1a;大家好&#xff01;我是晴空๓。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正&#xff0c;感谢大家的不吝赐教。我的唯一博客更新地址是&#xff1a;https://ac-fun.blog.csdn.net/。非常感谢大家的支持。一起加油&#xff0c;冲鸭&#x…