《计算机原理与系统结构》学习系列——计算机的算数运算(下)
系列文章目录
目录
- 浮点数的表示和运算
- 浮点数的表示
- 浮点数的规格化
- 浮点数标准
- 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的整数倍
- 该数无法精确表示
- 可能需要多位有效位来保证精度
- 难点是如何得到有效位
- 循环小数有个循环体
- 转换
- 求出足够多的有效位
- 根据精度要求(单、双) 截断多余位
- 按照标准要求给出符号位、阶和有效位

浮点数的运算
浮点数加法
运算步骤
- 先转化为二进制科学计数法
- 小对大,指数较小的数转化为指数较大的数的形式
- 再相加,列竖式相加
- 规格化,将和重新规格化
- 舍入查,四舍五入,检查是否发生指数溢出
对单精度,指数高于+127为上溢,低于-126为下溢
浮点数加法的硬件实现
- 比整数复杂很多
- 如果在一个时钟周期内完成,就会要求时钟周期非常的长
- 比整数运算更费时
- 较慢的时钟会对所有指令产生影响
- 浮点加法器通常需要花费几个时钟周期
- 可以被流水化


精度
IEEE定义了多种舍入控制策略
- 多存储几个位(舍入、保护、粘贴)
- 保护位:在浮点数中间计算中,在右边多保留的两位以上的首位,用于提高传入精度
- 舍入位:在右边多保留的两位中的第二位,使浮点中间结果满足浮点格式,得到最接近的数
- 粘贴:末位始终为1,或末位为0舍1入
- 可以选择不同的舍入模式
- 允许程序员微调计算中的行为
- 不是所有的硬件都实现了IEEE754的舍入策略
- 大部分语言和类库只是使用了缺省的策略
- 是硬件复杂度、效率和市场需求的折衷
浮点乘法
运算步骤
- 指数加:被乘数和乘数的指数相加(是真正指数,而不是加了偏阶的指数)
- 再相乘:列竖式相乘
- 规格化:将积重新规格化
- 舍入查:四舍五入,检查是否发生指数溢出
- 定符号:如果被除数和乘数反号,则符号位为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࿰…...
周末总结(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中...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
