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

news2024/10/6 20:35:05

系列文章目录


目录

  • 浮点数的表示和运算
  • 浮点数的表示
  • 浮点数的规格化
  • 浮点数标准
  • 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实现除二的幂会出现问题,对于无符号数是相同的,但是对于有符号,算数右移需要补入符号位才相同,如果补零则不同

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

重磅来袭!CMSIS-DAP 脱机烧录器 EasyFlasher 发布~

重磅来袭!CMSIS-DAP 脱机烧录器 EasyFlasher 发布~ 目录 重磅来袭!CMSIS-DAP 脱机烧录器 EasyFlasher 发布~相关文章1、前言1、产品特点2、功能说明3、支持芯片4、关于烧录5、写在最后 某宝店铺:觉皇工作室 购买链接:https://item…

【Spring】“请求“ 之传递单个参数、传递多个参数和传递对象

文章目录 请求1. 传递单个参数注意事项1 . **正常传递参数**2 . **不传递 age 参数**3 . **传递参数类型不匹配** 2. 传递多个参数3. 传递对象 请求 访问不同的路径,就是发送不同的请求。在发送请求时,可能会带一些参数,所以学习 Spring 的请…

习题5 循环

选择题 1、如下程序的运行结果为 【 正确答案: B】。 A.9 B.8 C.7 D.6 2、C语言的for语句中的表达式可以部分或全部省略,但两个 【 正确答案: C】不能省略。 但当三个表达式均省略后,因缺少判断条件&#xff0…

构建llama.cpp并在linux上使用gpu

使用gpu构建llama.cpp 更多详情参见https://github.com/abetlen/llama-cpp-python,官网网站会随着版本迭代更新。 下载并进入llama.cpp 地址:https://github.com/ggerganov/llama.cpp 可以下载到本地再传到服务器上 git clone https://github.com/gg…

AI特征工程-如何缓解模型过拟合

一、什么是模型过拟合? 1、举个例子 如上图第三个模型解释为出现了过拟合现象,过度的拟合了训练数据,而没有考虑到泛化能力,从而在新数据上表现不佳。 二、如何确定模型过拟合了 我们通常没有办法直观的看到过拟合。通常有以下几…

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

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

【Python】Python知识总结浅析

Python是一种高级编程语言,由Guido van Rossum于1991年首次发布。它以简洁的语法和强大的功能著称,适用于多种应用场景,包括Web开发、数据分析、人工智能、自动化脚本等。 易于学习和使用:Python的语法简洁明了,适合初…

信息安全工程师(36)访问控制主要产品与技术指标

前言 访问控制是确保系统资源安全的重要手段,其主要产品和技术指标对于理解和实施有效的访问控制策略至关重要。 一、访问控制主要产品 访问控制产品种类繁多,根据应用场景和需求的不同,可以分为以下几类: 防火墙: 功能…

【C语言】VS调试技巧

文章目录 什么是bug什么是调试(debug)debug和releaseVS调试快捷键监视和内存观察编程常⻅错误归类 什么是bug bug本意是昆⾍”或“⾍⼦”,现在⼀般是指在电脑系统或程序中,隐藏着的⼀些未被发现的缺陷或问题,简称程序…

Pytorch基础:网络层

文章目录 1.卷积层-Convolution Layers1.1 1d/2d/3d卷积1.2卷积--nn.Conv2d1.3转置卷积(实现上采样) 2.池化层3.线性层—Linear Layer4.激活函数层—Activate Layer 1.卷积层-Convolution Layers 卷积运算:卷积运算在输入信号(图像)上滑动,相应位置上进行乘加. 卷积核:又称过滤…

java版鸿鹄电子招投标系统功能架构设计 核心功能设计 鸿鹄电子招投标采购系统源码

java版鸿鹄电子招投标系统功能架构设计 核心功能设计 鸿鹄电子招投标采购系统源码

Linux高级编程_30_管道

文章目录 管道作用:分类: 前置知识:复制文件描述符dupdup2 【推荐使用】 无名管道概述: pipe函数实现: ps -A | grep bash 有名管道:实现有名管道的聊天无名管道与有名管道的区别? 管道 作用:…

小红书算法岗面试,竞争太激烈了

最近已有不少大厂都在秋招宣讲了,也有一些在 Offer 发放阶段。 节前,我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对新手如何入门算法岗、该如何准备面试攻略、面试常考点、大模型技术趋势、算法项目落地经验分享等热门话题进行了…

排版套料系统设计说明

先上效果图 项目地址 1.产品介绍 产品名称:StreamFit 智能排版套料系统 主要功能: 智能排版优化 功能描述:StreamFit 利用先进的算法技术,自动对各类材料(如布料、金属板材、纸张等)进行高效排版布局&am…

一次Mysql数据库活跃连接数高告警的排查方法

基础相关知识 在现代应用中,数据库的性能和稳定性直接影响到整个系统的运行情况。活跃连接数高的告警往往意味着数据库负载过重,可能会导致性能下降甚至服务不可用。 活跃连接数指的是当前与数据库建立连接并且处于活动状态的连接数量。 高活跃连接数…

阿里云百炼通义大模型接入流程,手把手教程

阿里云百炼通义大模型接入流程,即体验大模型、创建Agent应用和创建自训练大模型,阿里云百科aliyunbaike.com分享阿里云官网关于阿里云百炼通义大模型的接入流程: 阿里云百炼通义大模型接入流程 快速接入阿里云百炼通义大模型共分为三大步骤&a…

大模型客服的未来发展趋势

在当今数字化时代,大模型客服正以惊人的速度改变着客户服务的格局。随着技术的不断进步,大模型客服的未来发展趋势充满了无限可能。随着人工智能技术的快速发展,智能客服领域正迎来一场前所未有的变革。大模型客服作为其中的重要分支&#xf…

为什么营业执照显示经营异常

经营异常是怎么回事?是什么意思?1、年报未依照正常的时间公示或者某些要素没有公示;2、营业执照的地址与实际的地址不符,该地址联络不到人。经营异常不处理有什么后果?有什么影响?企业被列入工商异常一般会对公司的经营…

Maven的生命周期与依赖作用域介绍

说明:本文介绍Maven的生命周期,以及在pom.xml文件中每个依赖(dependency标签内)scope标签的内容。 Maven生命周期 在IDEA项目中,右侧边栏,点Maven,可以看到以下生命周期。 其中, c…

【AI知识点】偏差-方差权衡(Bias-Variance Tradeoff)

偏差-方差权衡(Bias-Variance Tradeoff) 是机器学习和统计学中的一个核心概念,描述了模型在训练数据和测试数据上的表现与模型复杂度之间的关系。它解释了为什么我们需要在模型复杂度和模型泛化能力之间做权衡,以避免模型出现欠拟…