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

计算机的算术运算之浮点数

3.5 浮点运算

科学计数法:小数点左边只有一位数字的表示数的方法。

规格化:没有前导0的浮点表示法。

二进制小数格式:

1.xxxxxxxxx X 2^yyyyy

浮点:二进制小数点不固定的数的计算机表示。

3.5.1 浮点表示

尾数:该值通常在0和1之间,放置在尾数字段中。上面的x

指数:在浮点运算的数值表示系统中,放置在指数字段中的值。上面的y

浮点数通常占用多个字的长度。下图S是浮点数的符号(1表示负数),指数由8位指数字段(包括指数的符号)表示,尾数由23位数表示。这种表示称为符号和数值,符号和数值的位是相互分离的。

通常来讲,浮点数可以这样表示:

F是尾数字段中表示的值,而E是指数字段表示的值。

使的RISC-V计算机具有很大的运算范围,小到2.0x10^-38,大到2.0x10^38,计算机都能表示出来。

但仍然会存在数太大和太小表示不出来的情况,和整数一样,浮点运算也会发生溢出问题。

上溢:正指数太大而无法用指数字段表示的情况。

下溢:负指数太大而无法用指数字段表示的情况。

双精度:以64位双字表示的浮点数。

单精度:以32位字表示的浮点值。

双精度浮点数需要一个RISC-V双字才能表示,如图所示,S仍然是数的符号位,指数字段为11位,尾数字段为52位。

表示实数范围,小到2.0x10^-308,大到2.0x10^308。

3.5.2 例外和中断

有些计算机会通过引发例外,有时称作中断来告知问题的出现。

例外:也称为中断,打扰程序执行的意外事件,用于检测溢出。

中断:来自处理器之外的例外(有些体系结构用术语中断表示所有的例外)。

3.5.3 IEEE 754 浮点数标准

例如:0/0或无穷减去无穷,这个符号是NaN,表示不是一个数。

3.5.4 浮点加法

9.999x10^1+1.610x10^-1,有效数位保存4位十进制,指数字段保存两位十进制数字。

  • 第一步:指数较小的数的小数点和指数较大的数的小数点对齐,0.01610x10^1
  • 第二步:将两个数有效位相加,9.999+0.016=10.015
  • 第三步:对和进行移位,调整指数大小,1.0015x10^2
  • 第四步:我们假定有效位数可能只有四位(不包括符号位),对结果四舍五入,1.002x10^2

例题:二进制浮点数加法

尝试将0.5和-0.4375用二进制相加

答案:假设保持4位精度

0.5=1/2=1.000x2^-1

-0.4375=-7/16=-7/2^4=-111/2^4=-0.0111=1.110x2^-2

以最高次幂为准,1.000x2^-1-0.111x2^-1=0.001x2^-1=1.000x2^-4=1/16=0.0625

3.5.5 浮点数乘法

3.5.6 RISC-V 中的浮点指令

3.5.7 精确算术

浮点数无法做到真正的精确的表示,通常只能用近似值来表示。

保护位:在浮点运算的中间计算中,保留在右侧的两个额外位的第一位,用于提高舍入精度。

舍入位:是中间结果符合浮点格式的方法,目标通常是找到符合格式的最接近的数,它也是在浮点运算的中间运算中保留在右侧的两个额外位的第二位,可以提高舍入精度。

例题:利用保护位进行舍入

最后位置单位(ulp):用于表示在实际数和可表示数之间的有效数位中最低有效位上的误差位数。

粘滞位:用于舍入时除了保护位和舍入位之外的位,当右侧有非零位时就设为1.

混合乘加:一条既执行乘法又执行加法的浮点指令,但只有在加法后进行舍入。

0.30000000000000004

转为二进制

=001100110011001100110010

3.5.8 总结

3.6 并行性与计算机算术:子字并行

许多图形系统最初使用8位数据来表示三原色中的一种,外加8位来表示一个像素的位置。

在电话会议和视频游戏中添加了扬声器和麦克风对声音的支持,音频采样需要8位以上的精度,但16位精度就已经足够了。

通过对128位加法器内划分进位链,处理器可以同时对16个8位操作数,8个16位,4个32位和2个64位操作数的短向量进行并行操作。这种分割加法器的开销很小,但带来的加速可能很大。将这种在一个宽字内部进行的并行操作称为子字并行,更通用的名称是数据级并行(data level parallelism)。对于单指令多数据,他们也被称为向量或SIMD。

3.7 实例:x86中的SIMD扩展和高级向量拓展

x86的原始MMX(MultiMedia eXtension,多媒体扩展)包含操作整数短向量的指令。而后,SSE(Streaming SIMD Extension,流式SIMD扩展)提供了操作单精度浮点数短向量的指令。在2001年,Intel在其体系结构中增加了包含双精度浮点寄存器及其操作的144条指令作为SSE2的一部分,它包含了8个可用于浮点数操作数的64位寄存器。AMD将其拓展到16个寄存器,作为AMD64的一部分,称为XMM,Intel将其标记为EM64T以供使用。

下图为:x86的SSE/SSE2浮点指令

除了在寄存器中存放单精度和双精度数,Intel还允许将多个浮点操作数组合(packed)到单个128位SSE2寄存器中:4个单精度或2个双精度。因此,SSE2的16个浮点寄存器实际为128位宽。如果操作数能够在存储器中组织成128位对齐的数据,则每条128位数据传输指令可以载入和存储多个操作数。这种组合的浮点数格式可以并行运算4个单精度(PS)或2个双精度(PD)数。

2011年,Intel使用高级向量拓展(Advanced Vector Extensions,AVX)将寄存器的位宽再次翻倍,现称为YMM。因此,现在单精度操作可以指定8个32位浮点运算或4个64位浮点运算。原有的SSE和SSE2指令现在可以操作YMM寄存器的低128位,因此,为了使用128位和256位操作,在SSE2操作的汇编指令前加上字母"v"表示向量,然后使用YMM寄存器名而不是XMM寄存器名,例如:执行2个64位浮点加法的SSE2指令。

addpd %xmm0, %xmm4

变为

vaddpd %ymm0, %ymm4

该指令现在产生4个64位浮点加法,2015年,英特尔将寄存器扩展至512位,现在称为ZIMM,在某些微处理器中使用了AVX512。英特尔已宣布计划在x86架构的最新版本中将AVX寄存器扩展到1024位。

3.8 性能提升:子字并行和矩阵乘法

前面一大段没耐心看。。。

结论:该AVX版本的速度提高了7.8倍,这非常接近于使用子字并行单次执行8倍的操作量时所期望的8倍提速。

3.9 谬误和陷阱

算术谬误和陷阱通常来源于计算机算术的有限精度和自然算术的无限精度之间的差异。

谬误:正如左移指令可以替代一个乘以2的幂的整数,右移等同于除以一个2的幂的整数。

陷阱:浮点加法不满足结合律,由于浮点数是实数的近似值,且计算机算术的精度有限,因此结合律不适用于浮点数。

谬误:适用于整型数据类型的并行执行策略也适用于浮点数据类型。

谬误:只有理论数学家关心浮点精度。

Intel为用户免费更换新版Pentium处理器,损失5亿美金。

相关文章:

计算机的算术运算之浮点数

3.5 浮点运算 科学计数法:小数点左边只有一位数字的表示数的方法。 规格化:没有前导0的浮点表示法。 二进制小数格式: 1.xxxxxxxxx X 2^yyyyy 浮点:二进制小数点不固定的数的计算机表示。 3.5.1 浮点表示 尾数:…...

Sqlite3 操作笔记

一、 数据格式 支持数据格式 一般数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断。SQLite具有以下五种数据类型: 1.NULL:空值。 2.INTEGER:带符号的整型,具体取决有存…...

mysqlRouter读写分离

数据库优化项目 使用中间件ProxySQL实现读写分离降低服务器压力,查看慢查询日志,反馈慢查询优化查询速度,清除无用数据,添加zabbix对mysql的监控。 ProxySql读写分离: 环境:mysql集群134、133 Mysql toute…...

【修订中】ffmpeg 知识点

一、两种安装方式 static FFmpeg binaries for macOS 64-bit Intel brew install ffmpeg 时间有点长 需要挂上代理 二、ffmpeg 使用这个工具去除水印以后原来水印的那个点就模糊了如何解决这个问题呢 使用 FFmpeg 的delogo过滤器去除水印时,通常会导致水印所…...

Rust初踩坑

一、下载 到官网https://www.rust-lang.org/zh-CN/tools/install下载你需要的版本 二、安装 执行rustup-init 文件,选择1 按提示直到安装完成 可以通过以下命令测试: rustc -V # 注意的大写的 V cargo -V # 注意的大写的 V三、在VScode中…...

element-ui 的el-calendar日历组件样式修改

<div style"width:100%;height:calc(100% - 35px);margin-top: 5px;"><el-calendar v-model"calendar" style"height: 100%;"></el-calendar></div> css部分 <style>/* 去除底色 */ /deep/ .el-calendar {backg…...

LinuxDebian系统安装nginx

1、安装了必要的开发工具和库文件 sudo apt update sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev2、下载Nginx源码 cd /home/kylin wget http://nginx.org/download/nginx-1.20.1.tar.gz tar -zxvf nginx-1.26.2.tar.gz cd nginx-1…...

Redis 数据类型Streams

目录 1 基本特性 2 主要操作命令 2.1 XADD key ID field value [field value ...] 2.2 XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] ID [ID ...] 2.3 XRANGE key start end [COUNT count] 2.4 XREVRANGE key end start [COUNT count] 2.5 XGROUP …...

基智科技CEO张文战:探索火山引擎数据飞轮模式下的大模型应用新机会

9月下旬&#xff0c;火山引擎数据飞轮研讨会在北京举办&#xff0c;北京基智科技有限公司&#xff08;以下简称“基智科技”&#xff09;CEO张文战作为积极探索大模型应用领域的企业代表&#xff0c;围绕“数据飞轮如何转进企业业务流”展开主题分享&#xff0c;并介绍基智科技…...

【AUTOSAR标准文档】AotuSar结构横向分层详解(RTE、BSW)

Top view The AUTOSAR Architecture distinguishes on the highest abstraction level between three software layers: Application, Runtime Environment and Basic Software which run on a Microcontroller. 译文&#xff1a;AUTOSAR架构在最高抽象层次上将软件分为三层&…...

新 Chrome 插件可检测 AI 伪造声音;Canary Speech 推出用于临床对话的语音分析技术丨 RTE 开发者日报

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…...

1. 路由定义

1. 通过配置文件形式 配置方式与laravel的配置方式相似 <?php use Hyperf\HttpServer\Router\Router;Router::get(/hello-hyperf, function () {return Hello Hyperf.; });// 设置一个 GET 请求的路由&#xff0c;绑定访问地址 /get 到 App\Controller\IndexController 的 …...

我们可以用微服务创建状态机吗?

大家好&#xff0c;我是锋哥。今天分享关于【我们可以用微服务创建状态机吗&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; 我们可以用微服务创建状态机吗&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 是的&#xff0c;微服务架构可…...

邦芒贴士:职场新人需远离的7种坏习惯

咱们每一个人都会有这样那样的毛病&#xff0c;而试用期就是试毛病的大小。对于职场新人来说&#xff0c;第一份工作很容易暴露这样那样的职业毛病。职业习惯直接决定了我们以后的职业发展&#xff0c;职业能力。对于职场新人来说&#xff0c;在试用期内&#xff0c;一些职场坏…...

面向医院的统一支付平台产品经验分享

我们面向医院的统一支付平台其实应该属于四方平台的范畴,依托于微信、支付宝等第三方支付平台和银联、银行等渠道生存。 二、医院常见系统说明: 先普及一下医院的系统情况: HIS(医院信息系统Hospital Information System):医院内的核心系统,为医院所属各部门提供病人诊…...

http作业

配置nginx服务通过ip访问多网站 1、前提配置 2、安装nginx服务 3、配置多IP 在linux主机上查看ip地址 4、定义nginx文件 5、在主机创建文件&#xff0c;重启nginx服务 6、测试...

AlDente Pro for Mac电脑 充电限制保护工具 安装教程【简单,轻松上手】

Mac分享吧 文章目录 AlDente Pro for Mac 充电限制保护工具 安装完成&#xff0c;软件打开效果一、AlDente Pro for Mac 充电限制保护工具 Mac电脑版——v1.28.41️⃣&#xff1a;下载软件2️⃣&#xff1a;安装软件&#xff0c;将安装包从左侧拖入右侧文件夹中&#xff0c;等…...

C语言数据结构之算法复杂度

目录 一、数据结构是什么 二、算法是什么 三、算法的效率 3.1 复杂度的概念 四、时间复杂度 4.1 大O渐进表示法 4.2 算法题分析 五、空间复杂度 5.1 复杂度对比 5.2 算法题题分析 正文开始 一、数据结构是什么 每个计算机专业的同学在大学都会接触到一门计算机必修课《数…...

HDU RSA

翻译成中文后&#xff1a; 思路&#xff1a;由题易得&#xff0c;d * e y * f ( n ) 1 ,且gcd ( e , f ( n ) ) 1,所以用扩展欧几里得求出 d &#xff0c;但要保证 d 是非负的&#xff0c;最有用快速幂求出每个字符即可。 #include<bits/stdc.h> using namespace std;…...

数据仓库建设 : 主题域简介

在数据仓库建设中&#xff0c;主题域是数据模型的一个重要概念&#xff0c;它帮助构建逻辑清晰、层次分明的数据结构。主题域的设计基于企业的业务结构&#xff0c;将业务中的关键部分提炼出来&#xff0c;划分为若干个主题域。每个主题域对应一个特定的业务领域&#xff0c;便…...

开源表单生成器OpnForm

什么是 OpnForm &#xff1f; OpnForm 是一个开源的表单构建工具&#xff0c;旨在简化创建自定义表单的过程&#xff0c;特别适合无编码知识的用户。它通过人工智能优化表单创建流程&#xff0c;支持多种用途&#xff0c;如联系人表单、调查表等。OpnForm 提供了一个直观的拖放…...

Zookeeper面试整理-Zookeeper的基础概念

Zookeeper的基础概念是理解其作为分布式协调服务的核心要素。以下是一些关键的基础概念: 1. Zookeeper是什么? Zookeeper 是一个开源的分布式协调服务,用于分布式应用中的配置管理、命名服务、分布式锁、集群管理等任务。它提供了一组简单的原语,帮助开发人员构建健壮的分布…...

验证archive_command配置是否正确

要验证 archive_command 配置是否正确&#xff0c;你可以按照以下步骤进行&#xff1a; ‌检查配置文件‌&#xff1a; 确保 postgresql.conf&#xff08;或你的 PostgreSQL 实例使用的任何自定义配置文件&#xff09;中的 archive_command 已经设置为你想要的命令。 ‌重启 …...

2024.10.19小米笔试题解

第一题数独计数 考虑dfs遍历所有情况 n = int(input())def check(grid, x, y, v):dx = [1, 0, -1, 0]dy = [0, 1, 0, -1]for i in range(4):nx, ny = x + dx[i], y + dy[i]if 0 <= nx < 3 and 0 <= ny < 3:if grid[nx][ny] == 0:continueif abs(grid[nx][ny] - v…...

SQL-SERVER导入excel表格

首先先找到数据源&#xff0c;如上图。我们用的是excel表格。 这里你需要选择excel版本&#xff0c;反正你随便选&#xff0c;应该没什么问题的。 再导入数据 我们需要导入最后那个&#xff0c;也就是OLE DB Provider for SQL SERVER 只有这个才能导入到当前的数据库中 接下来…...

Vue学习笔记(三、v-cloak、v-text、v-html指令)

一、 v-cloak v-cloak 是 Vue.js 提供的一个特殊指令&#xff0c;用于在 Vue 实例准备完毕并开始进行 DOM 编译之前隐藏未编译的模板。它通常用于防止页面闪烁或者展示未编译的 Vue 模板语法。 你可以简单地在 HTML 元素上添加 v-cloak 指令&#xff0c;然后在确保 Vue…...

Java | Leetcode Java题解之第496题下一个更大元素I

题目&#xff1a; 题解&#xff1a; class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {Map<Integer, Integer> map new HashMap<Integer, Integer>();Deque<Integer> stack new ArrayDeque<Integer>();for (int i num…...

【ArcGIS微课1000例】0125:ArcGIS矢量化无法自动完成面解决方案

文章目录 一、坐标系统问题二、正确使用自动完成面工具一、坐标系统问题 1. 数据库坐标系 arcgis矢量化的过程中,无法自动完成面,可能是因为图层要素没有坐标系造成的。双击数据库打开数据库属性,可以查看当前数据框的坐标系。 2. 图层坐标系 双击图层,打开图层属性,切…...

slam技术支持下的果园作物估产论文汇总

文章目录 2019ROLS : Robust Object-level SLAM for grape counting&#xff08;CVPR&#xff09; 2021PATHoBot: A Robot for Glasshouse Crop Phenotyping and Intervention 2023ORB-Livox: A real-time dynamic system for fruit detection and localization&#xff08;Com…...

政安晨【零基础玩转各类开源AI项目】基于本地Ubuntu (Linux ) 系统应用Gradio-Lite:无服务器 Gradio 完全在浏览器中运行

目录 简介 什么是@gradio/lite? 入门 1.导入 JS 和 CSS 2. 创建标签 3. 在标签内编写你的 Gradio 应用程序 更多示例:添加其他文件和要求 多个文件 其他要求 SharedWorker 模式 代码和演示playground 1.无服务器部署 2.低延迟 3. 隐私和安全 限制 尝试一下!…...