浮点数的由来及运算解析

数学是自然科学的皇后,计算机的设计初衷是科学计算。计算机的最基本功能是需要存储整数、实数,及对整数和实数进行算术四则运算。

但是在计算机从业者的眼中,我们知道的数学相关的基本数据类型通常是整型、浮点型、布尔型。整型又分为int8(用8位表示的整数)、uint8(用8位表示的无符号整数)、int16、uint16、int32、uint32,浮点型又分为float16(半精度,FP16)、float32(单精度)、float64(双精度)。今天,我们就来聊聊浮点数。

#1 为什么叫浮点数?

由于实数在计算机中的表示方法是以小数点浮动的方式表示的,所以称之为浮点数。

1、计算机中的整数表示

众所周知,计算机最底层是二进制计数。用二进制数表示整数很简单(本文不考虑原码、反码、补码,也不考虑大端模式和小端模式),最高位表示符号位,0表示正数,1表示负数,余下的位表示二进制值。

int8即使用8位表示的整数,最高位用来表示正负符号,还有7位表示数字,其所能表示的范围是[-128,127]。有人可能会想,00000000表示正0,10000000表示负0,int8表示的范围岂不是[-128,127]吗?但用两个序列表示同一个数,这本身就是一种浪费。如果计算机从最底层就开始这样浪费,那还了得?所以节约资源,从我做起。

2、用定点数来表示实数

最高位表示符号,然后再约定整数占几位,余下的位都是小数。从另一个角度来说,即小数点的位置是固定的。优点是计算很方便,缺点是存储的数据范围有限。

3、用浮点数来表示实数

最高位表示符号,再约定一部分二进制位表示指数域,余下的是数域。优点是能表示的数据范围很大,缺点是计算慢。但是80286出现后,有了浮点协处理数(FPU),浮点数表示方式成为了主流。

IEEE-754是IEEE制定的二进制浮点数算术标准(IEEE即电气与电子工程师协会,这个协会制定了很多计算机领域的标准),也计算机中表示浮点数的行业标准,于1985年正式采用,2008年和2019年又分别进行了完善和修订。

题外话

我司首席科学家金耀初教授,就是现任IEEE计算智能协会主席。计算智能协会是IEEE下设的39个专业学会之一,目前是会员约9000人,是IEEE唯一以人工智能、计算智能为主要研究领域的学会。

我们以最常见的64位、32位、16位浮点数为例,如下图所示:

添加图片注释,不超过 140 字(可选)

FP64称为双精度浮点数,一共64位,1位表示正负符号,11位表示指数,52位表示小数,可表达的精度范围是:

FP32是我们最常用的浮点数,也称为单精度浮点数,一共32位,1位表示正负符号,8位表示指数,23位表示小数,可表达的精度范围是:

FP16称为半精度浮点数,一共16位,1位表示正负符号,5位表示指数,10位表示小数,可表达的数据范围是:

添加图片注释,不超过 140 字(可选)

我们再以最简单的16位浮点数为例,如下图所示:

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)

互联网上有一些很有意思的网页,能帮我们更深刻的认识到浮点数。我们挑选了由纽约市立大学计算机科学系提供的网页,网址为https://babbage.cs.qc.cuny.edu/ieee-754.old/decimal.html(或者也可以打开https://baseconvert.com/ieee-754-floating-point)。

添加图片注释,不超过 140 字(可选)

接下来,我们随机输入一个浮点数,例如38.375,然后点击Rounded,再看看其在计算机中是如何表达的。

添加图片注释,不超过 140 字(可选)

  • 最高位是31位(位序从0开始),此处为0,表示是正数

  • 接下来是指数域,从30位到23位一共是8位,最大能表示的数是256,最小能表示的数是0

  • 指数域的值要减掉127,此处指数域是10000100,即132-127=5

  • 余下的都是尾数域,从22位到0位一共是23位,此处是1.00110011(小数点前面的1是最终的32位数据里不存在的,因为尾数规范化后都是以1开始,所以这个1都是省略的)

最高位好理解,但是指数域5和尾数域的1.00110011是怎么得到38.375的?请各位先思考一下再看下面的计算过程。

添加图片注释,不超过 140 字(可选)

移动数域的小数点位置,这个操作是不是浮点?我认为,这就是浮点数的由来。

接下来还有一个很有意思的问题,即浮点数的精度问题。以0.3这个数为例,我们输入0.3后,分别点击Not Rounded和Rounded(因为这里是二进制数,不适合翻译为四舍五入,所以我用原单词替代),分别得到如下两图:

Not Rounded模式下

Not Rounded模式下,数域为1 .00110011001100110011001,最终计算得到的十进制数是0.299999总是比0.3小一点点。

为什么会这样?因为十进制的有穷数0.3,转换为二进制数后是一个无穷数(1001无限循环),如果直接扔掉后面的数,那么最终转换后的十进制数据就会少了一点点,变成了0.29999999。

Rounded模式下

Rounded模式下,数域为1 .00110011001100110011010,也就是向前进了一位,这样最终得到的数变成了0.30000001,即比实际的十进制数0.3大了一点点。

所以在实际编程中,不建议对浮点数数据直接进行等值比较,一般使用区域比较,因为浮点数存在精度问题。c/c++程序员们遇到的问题0.1 + 0.2 = 0.30000000000000004也是这个原因导致的。

#2 BF16(Brain Float)

BF16是一种全新的浮点数格式,专门服务于人工智能和深度学习,最开始是Google Brain发明并应用在TPU上的,后来Intel,Arm及一众头部公司都在广泛使用。

BF16也是用16位来表示浮点数,但是是用8位表示指数,用7位表示小数,此时BF16表示的整数范围和FP32是一样的,小数部分则存在着很大的误差。

以前大部分的AI训练都使用FP32,但有相关的论文证明,在深度学习中降低数字的精度可以减少tensor相乘所带来的运算功耗,且对结果的影响却并不是非常大,且更少的尾数也使它能够拥有更小的芯片面积。因此在模型越来越大、计算越来越密集的人工智能领域,BF16也得到了广泛的应用。

#3 模型量化及INT8

从数据在计算机上的表示来看,整数运算比浮点数运算要快很多。而训练一个深度神经网络模型得到的参数通常都是FP32类型的,我们将其部署到终端NPU上时,通常需要将其量化为8位整数(即int8或者uint8)。

为什么人工神经网络模型要量化?因为终端的算力、资源都是有限的,量化后有如下好处:

  • 减小了模型尺寸。原有的一个参数如果是32位表示的实数,量化后用8位整数来表示,这样模型能缩小至原模型大小的四分之一;

  • 降低了内存和存储占用;

  • 降低了功耗;

  • 提升了计算速度。

这些特点都能有效地帮助模型部署在终端设备上,虽然量化会带来一些精度上的损失,但通过良好的量化算法和设计有效的算子,量化后的模型在终端上能够拥有接近云端模型的准确率,同时能极大节约云端算力和网络传输成本。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[AI OpenAI-doc] 延迟优化

本指南涵盖了一系列核心原则,您可以应用这些原则来改善在各种LLM相关用例中的延迟。这些技术来自于与广泛的客户和开发人员在生产应用程序上的合作,因此无论您正在构建什么——从细粒度的工作流程到端到端的聊天机器人,都应该适用&#xff01…

PostgreSQL建表语句 INT, INT2, INT4, INT8 分别对应Java,Go, Python什么数据类型?

🐯 PostgreSQL建表语句 INT, INT2, INT4, INT8 分别对应Java,Go, Python什么数据类型 博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题…

【JVM】从三种认知角度重识JVM

目录 JVM概述 JVM主要功能 虚拟机是Java平台无关的保障 JVM概述 JVM:Java Virtual Machine,也就是Java虚拟机。 虚拟机:通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的计算机系统(物理上不存在)。 JVM通…

Springboot + xxlJob注意事项

1. 部署 就是这个地址: https://gitee.com/xuxueli0323/xxl-job 由于xxl-job的思想是 调度中心负责调度任务,然后有执行器负责接受调度的信息,然后根据调度,执行任务中的具体逻辑 将 xl-job-admin 启动起来,操作xl-job-admin这个文件夹下的配置文件即可: 创建数据库 执行sql…

Kaspa是潜力金吗?那么如何获取,以bitget钱包为例

$KAS 这个币比较小众,华语区知道的不多,目前挖这个币的矿工也不多,但是大家都有一个默契,就是尽量不要宣传,先建设生态,自私的心理就是:自己先多挖些币。 简单介绍一下 #KASPA 这个项目&#x…

第二证券今日投资参考:银保渠道合作限制松绑 低空旅游借势起飞

昨日,两市股指盘中震动上扬,沪指一度涨近1%续创年内新高,创业板指一度涨超2%。到收盘,沪指涨0.83%报3154.32点,深证成指涨1.55%报9788.07点,创业板指涨1.87%报1900.01点,科创50指数涨2.26%&…

Linux提权--Rsync(未授权访问) Docker 组挂载

免责声明:本文仅做技术学习与交流... 目录 Rsync(未授权访问) 介绍: 靶场及过程: 提权过程: Docker 组挂载 原理: 复现: 利用: 具体操作: 1-确定是否有docker服务 2-查看用户是否在docker组里面 3-执行命…

apinto OpenAPI

OpenApi 上游 查询列表 查询详情 新增 { "name": "jg_upstream", "driver": "http", "description": "通过postman添加上游", "scheme": "HTTPS", "retry":"1", "…

1063 计算谱半径

solution 找出虚部和实部平方和的最大值&#xff0c;输出该最大值的开方&#xff0c;保留两位小数 #include<iostream> #include<cmath> using namespace std; int main(){int n, a, b, ans 0;scanf("%d", &n);while(n--){scanf("%d%d"…

超便捷备忘录共享方法 文字文件都可共享

在这个信息爆炸的时代&#xff0c;备忘录已成为我们生活中不可或缺的小助手。它记录着我们的工作计划、待办事项、灵感闪现&#xff0c;甚至是那些温馨的家庭琐事。然而&#xff0c;当我们在不同的设备间穿梭&#xff0c;如何在手机、电脑&#xff0c;甚至是不同品牌的手机之间…

计算机辅助考试

加我zkhengyang可申请加入数字音频系统研究开发交流答疑群(课题组)&#xff0c;考神训练营&#xff0c;&#xff0c; 为了通过某项考试&#xff0c;可借助计算机(个人电脑)来辅助备考。本人通过电脑辅助学习&#xff0c;成功通过了驾照科目一&#xff0c;全国计算机二级C语言考…

新手做视频号电商,做什么样的产品好卖?适合不会选类目的新手看

大家好&#xff0c;我是电商花花&#xff0c;专注做电商的花花。 视频号现在的发展可以说是非常好的&#xff0c;拥有着空前的市场和流量&#xff0c;随着视频号小店新项目对电商的冲击&#xff0c;让更多创业者和新手商家开始涌入视频号电商的行列。 想要在新项目中抢占流量…

如何给远程服务器配置代理

目录 前言 正文 更换镜像源 开始之前 安装过程 遇到的问题 尾声 &#x1f52d; Hi,I’m Pleasure1234&#x1f331; I’m currently learning Vue.js,SpringBoot,Computer Security and so on.&#x1f46f; I’m studying in University of Nottingham Ningbo China&#x1f4…

java面试题(常见集合)

算法复杂度分析 时间复杂度分析 时间复杂度分析&#xff1a;来评估代码的执行耗时的 大O表示法&#xff1a;不具体表示代码真正的执行时间&#xff0c;而是表示代码执行时间随数据规模增长的变化趋势 空间复杂度 空间复杂度的全称是渐进空间复杂度&#xff0c;表示算法占用…

防爆巡检手持终端在燃气巡检作业中的应用

在燃气巡检作业中&#xff0c;安全始终是首要考虑的因素。面对易燃易爆的燃气环境&#xff0c;传统的巡检方式已经难以满足现代安全管理的需求。随着科技的不断进步&#xff0c;防爆巡检手持终端应运而生&#xff0c;成为燃气巡检作业的得力助手。这些终端不仅具备高度的防爆性…

docker-compose安装emqx集群(最新)(host模式)

机器&#xff1a; 10.60.0.20 10.60.0.21 10.60.0.22 一、三台机子都配置域名&#xff08;/etc/hosts&#xff09; 10.60.0.20 node1.emqx.io 10.60.0.22 node3.emqx.io 10.60.0.21 node2.emqx.io 二、docker-compose.yml&#xff08;10.60.0.21&#xff09; 其他两台机子自…

WordPress 、Typecho 站点的 MySQL/MariaDB 数据库优化

今天明月给大家分享一下 WordPress 、Typecho 站点的 MySQL/MariaDB 数据库优化&#xff0c;无论你的站点采用是 WordPress 还是 Typecho&#xff0c;都要用到 MySQL/MariaDB 数据库&#xff0c;我们以 MySQL 为主&#xff08;MariaDB 其实跟 MySQL 基本没啥大的区别&#xff0…

FHMG037、FHMG045、FHMG063比例电磁铁驱动放大器

该FHMG037、FHMG045、FHMG063比例电磁铁符合VDE0580&#xff0c;电枢空间耐压可达350 bar&#xff0c;也适用于干运行&#xff0c;磁力和在行程在横向工作范围内略有下降&#xff0c;与BEUEC比例放大器驱动工作&#xff0c;力值和电流之间很大程度上有比例关系&#xff0c;通过…

【单片机调试】mcu调试bug记录

【单片机调试】mcu调试bug记录 2023.5-2023.11待输入 2023.12-2023.22024.3-至今1.spi通信问题 2023.5-2023.11 待输入 2023.12-2023.2 辞职阶段&#xff1a;【STM32调试】寄存器调试不良问题记录持续版 2024.3-至今 1.spi通信问题 现象说明&#xff1a; mcu与afe芯片为spi通…

PDF Squeezer for Mac,让PDF压缩更高效

还在为PDF文件过大而烦恼吗&#xff1f;试试PDF Squeezer for Mac吧&#xff01;它拥有强大的压缩功能&#xff0c;可以快速将PDF文件压缩至更小的体积&#xff0c;让你的文件传输更快捷。同时&#xff0c;它还支持多种压缩方式&#xff0c;满足你的不同需求。赶快下载体验吧&a…