IEEE754 标准存储浮点数
1. IEEE754 标准简介
IEEE754 标准是一种用于浮点数表示和运算的标准,由国际电工委员会(IEEE)制定。它定义了浮点数的编码格式、舍入规则以及基本的算术运算规则,旨在提供一种可移植性和一致性的方式来表示和处理浮点数
IEEE754 标准定义了两种常见的浮点数格式:单精度(32位)和双精度(64位)。这些格式使用了符号、阶码(指数)、尾数的二进制表示形式,其中符号表示浮点数的正负,指数表示浮点数的数量级,而尾数表示浮点数的精度。同时,IEEE754 标准还定义了特殊值,如正无穷大、负无穷大和 NaN(非数值)
IEEE754 标准还规定了浮点数的四种基本算术运算:加法、减法、乘法和除法。这些运算遵循一定的舍入规则,以确保结果在浮点数表示范围内具有最佳的精度和准确性
使用 IEEE754 标准可以提供一种统一的浮点数表示和运算方式,使得不同的计算机和编程语言之间可以进行浮点数数据的可靠交换和计算。需要注意的是,IEEE754 标准仍然存在一些舍入误差和精度限制,因此在进行浮点数运算时需要小心处理,并考虑数值精度可能导致的误差问题
2. float 的存储方式
float 占用 32 位的存储空间,32 位被分为了如下的三个部分,各个部分所占的位数如下图所示,右边为低位

- 符号位:符号位为 0 说明该浮点数为正数,若为 1 则说明浮点数为负数
- 阶码:代表该浮点数被二进制科学表示法规范化后的指数,阶码采用移码表示,后面会有具体的例子进行讲解
- 尾数:被二进制规格化后要求小数点前一位数必须为 1,由于所有的浮点数都采用这样的方式进行处理,所以尾数中实际隐含了最高位 1,例如尾数为 M,则实际在还原时,相当于是 1.M,后面会有具体的例子进行讲解
设一个浮点数的符号存储的二进制为 s,阶码为 E,尾数为 M
则存储的该浮点数为:(-1)s×1.M×2E-偏置值,在单精度浮点数中,该偏置值为127
还需要注意的是,在 IEEE754 中,阶码全 0 和全 1 的情况被列为了特殊情况(后面的小节会讲到),所以阶码实际可以使用的范围为 1~254
2.1 浮点数如何转为 IEEE754 标准
例如现在有十进制数:85.125
其中整数部分为:85,对应二进制为 101 0101
小数部分为:0.125,对应二进制为 001
所以 85.125 对应的二进制就为:101 0101.001
规范化后:1.010101001 x 2^6
符号位为:0
阶码:6+127(偏置值)= 133
对应二进制为:133 = 10000101
尾码:010101001(注意这里的尾码实际上没有包含最高位的 1),由于这里没有 23 位,后续会补 0 直到尾码有 23 位
IEEE754 标准下的存储二进制为:
| 符号(1位) | 阶码(8位) | 尾数(23位) |
|---|---|---|
| 0 | 1000 0101 | 010 1010 0100 0000 0000 0000 |
对应的十六进制数为:42 AA 40 00
2.2 IEEE754 标准如何转化为浮点数
现有符合 IEEE754 标准的以十六进制存储的浮点数:C1 51 00 00
转为二进制数然后将每一位与之含义对应:
| 符号(1位) | 阶码(8位) | 尾数(23位) |
|---|---|---|
| 1 | 1000 0010 | 101 0001 0000 0000 0000 0000 |
其中:
s = 1
M = 101 0001 0000 0000 0000 0000 对应十进制为:.6328125(需要注意的是,这里的数值代表的是小数点后面的数值)
E = 1000 0010 对应的十进制为 130
然后我们带入上面给出的公式中 (-1)1×1.6328125×2130-127 = -1.6328125×23 = -1.6328125×8 = -13.0625
所以 C1 51 00 00 所代表的浮点数就是 -13.0625
3. double 的存储方式
double 占用 64 位的存储空间,64 位被分为了如下的三个部分,各个部分所占的位数如下图所示,右边为低位

双精度浮点数中,该偏置值为1023,阶码实际可以使用的范围为 1~2046。其余的存储方式与 float 是一样的,这里就不再赘述
4. IEEE754 制定的特殊值
当阶码全为 0:
- 尾数 M 不全为 0 时,表示非规格化小数:±(0.xxx…xx)×2-126
- 尾数 M 全为 0 时,表示真值 ±0
当阶码全为 1:
- 尾数 M 全为 0:表示无穷大
- 尾数 M 不全为 0:表示数值“NAN”,如
0/0、∞-∞等
4.1 浮点数的存储范围
有了前面小节的铺垫,相信很容易可以求出来 float 的存储范围了,首先来寻找 float 可以表示的最大值(无穷除外):
让符号为 0,阶码为 254,尾数全部为 1,这样我们可以得到下面的二进制
| 符号(1位) | 阶码(8位) | 尾数(23位) |
|---|---|---|
| 0 | 1111 1110 | 111 1111 1111 1111 1111 1111 |
带入公式:(-1)0×(2-2-23)×2254-127 =(2-2-23)×2127 = 2128-2104
这个就是 float 可以表示的最大的值,只要加上负号就是它可以表示的最小的值
但这还不是我们的目标,根据上面的学习我们知道了 float 在靠近 0 的地方其实会有很多的数字不能表示到,那么他可以表示的最小/大的规范化正/负数是多少呢?
我们来考虑在什么情况下,float 可以取到最小规范化正数的值:
让符号为 0,阶码为 1,尾数全部为 0,这样我们可以得到下面的二进制
| 符号(1位) | 阶码(8位) | 尾数(23位) |
|---|---|---|
| 0 | 0000 0001 | 000 0000 0000 0000 0000 0000 |
带入公式:(-1)0×1.0×21-127 =2-126
这个就是 float 可以表示的最小规范化正数的值,只要加上负号就是它可以表示的最大规范化负数的值
double类型可以根据上面的方法如法炮制,这里就不再赘述,具体的范围可以参考下面的表格
| 格式 | 最小正值 | 最大正值 |
|---|---|---|
| float | 2-126 | (2-2-23)×2127 |
| double | 2-1022 | (2-2-52)×21023 |
| 格式 | 最大负值 | 最小负值 |
|---|---|---|
| float | (2-23-2)×2127 | -2-126 |
| double | (2-52-2)×21023 | -2-1022 |
根据上面的表格可以看到浮点数并不是连续的表示数轴上的数(准确的说浮点数本身就只能间断的表示某一些数,但是我这里所说间断指的是在一大段的范围内,浮点数都是无法表示的,比如 float 类型从 0~2-126 这一段的数字它就无法进行表示),可以参考下面的图示

当发生下溢时,会被当做机器零处理,发生上溢时,会被当做无穷来处理
IEEE754 还制定了浮点数运算的规则,有兴趣的读者可以自行查阅,本文就不做说明了
相关文章:
IEEE754 标准存储浮点数
1. IEEE754 标准简介 IEEE754 标准是一种用于浮点数表示和运算的标准,由国际电工委员会(IEEE)制定。它定义了浮点数的编码格式、舍入规则以及基本的算术运算规则,旨在提供一种可移植性和一致性的方式来表示和处理浮点数 IEEE754 …...
CSS 两栏布局
目录 CSS两栏布局(左列定宽,右列自适应宽) 方法一:浮动margin 方法二:定位margin 方法三:浮动BFC 方法四:Flex布局 方法五:able布局 CSS两栏布局(左列不定宽&#…...
RHCSA常用命令总结
RHCSA回顾 1.Linux学习环境的安装部署 VMware虚拟机rhel9.x 磁盘容量:20GB cpu:1颗2核心 内存:2G 网卡:NAT 新CD/DVD设置镜像源文件 取消显示器的3d支持 (1)安装RHEL9 (2)组件:带有GUI的服务器 (3)分区…...
【Spring Boot】详解restful api
目录 1.restful api 1.1.历史 1.2.内容 1.3.传参 2.Spring Boot中的Restful Api 1.restful api 1.1.历史 RESTful API(Representational State Transferful Application Programming Interface)是一种设计风格,用于构建基于网络的应用…...
LISTAGG 函数
# LISTAGG 函数 对于查询中的每个组,LISTAGG 聚合函数根据 ORDER BY 表达式对该组的行进行排序,然后将值串联成一个字符串。 ## 语法: sql LISTAGG( [DISTINCT] aggregate_expression [, delimiter ] ) [ WITHIN GROUP (ORDER BY order_list) ] …...
485modbus转profinet网关连三菱变频器modbus通讯配置案例
本案例介绍了如何通过485modbus转profinet网关连接威纶通与三菱变频器进行modbus通讯。485modbus转profinet网关提供了可靠的连接方式,使用户能够轻松地将不同类型的设备连接到同一网络中。通过使用这种网关,用户可以有效地管理和监控设备,从…...
1024节日
程序员节日...
【@EnableWebMvc的原理】
用途 启用SpringMvc 的 Java 配置类,代替 xml 格式的配置文件。 一、查看运用(注解 EnableWebMvc ,实现 WebMvcConfigurer ) Component("com.ibicd") EnableWebMvc public class AppConfig implements WebMvcConfigu…...
css3 2d转换transform详细解析与代码实例transform
CSS3 Transform是CSS3的一个模块,其目的是为了通过对元素的变形、旋转、缩放、平移等操作,能够更加丰富的展示页面效果。下面是CSS3 Transform的详细解析与代码实例: transform属性 transform属性用于对元素进行变形操作,其属性…...
点亮现代编程语言的男人——C语言/UNIX之父Dennis Ritchie
祝各位程序员们1024程序员节快乐🎉🎉🎉 图片来自网络,侵删 前言 在程序员中,有一位人物的不被人熟知,他的贡献甚至比他自身更要出名 C语言之父,UNIX之父——Dennis MacAlistair Ritchie 一…...
找不到msvcp100.dll解决教程
在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp100.dll丢失”。这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题,本文将介绍四个修复msvcp100.dll丢失的方法,帮助读者快速恢复计算机的正常运…...
萃取和constexpr
最近重温了一下萃取发现其与constexpr有相似之处,记录如下。 一、引出萃取 STL的在中心思想是将容器和算法分开,再通过迭代器iterator这一迭代器来将两者粘合起来。 通过迭代器进行算法计算,需要涉及两个问题: 问题一.通常需要…...
决策树完成图片分类任务
数据集要求: 训练集 和 验证集 (要求分好) 图片放置规则 : 一个总文件夹 放类别名称的子文件夹 其中子文件夹 为存放同一类别图片 举个例子 分类动物 则 总文件夹名称为动物 子文件夹为 猫 狗 猪猪 。。。 其中猫的文件夹里面…...
Docker 容器全部停止命令
Docker是一个开源的容器化平台,它可以帮助开发者快速构建、部署和运行应用程序。在使用Docker时,我们通常会创建多个容器来运行不同的服务或应用。当我们需要停止所有的容器时,可以使用一些命令来实现。本文将介绍几种常见的停止所有Docker容…...
对GRUB和initramfs的小探究
竞赛时对操作系统启动过程产生了些疑问,于是问题导向地浅浅探究了下GRUB和initramfs相关机制,相关笔记先放在这里了。 内核启动流程 在传统的BIOS系统中,计算机具体的启动流程如下: 电源启动:当计算机的电源打开时&…...
springboo单机多线程高并发防止重复消费的redis方案
springboo单机多线程高并发防止重复消费的redis方案 仅提供方案与测试。 想法:第一次收到userCode时,检查是否在redis中有,如果有,就表明已经消费了,返回抢单失败;否则,就去消费,顺…...
Java架构师内功数据库
目录 1 导学2 数据库基本概念2.1 数据库系统2.2 三级模式-两级映像2.3 数据库设计2.4 数据模型2.4.1 E-R模型2.4.2 关系模型2.5 关系代数3 规范化和并发控制3.1 函数依赖3.2 键与约束3.3 范式3.3.1 第一范式1NF3.3.2 第二范式3.3.3 第三范式3.4 模式分解3.5 并发控制3.6 封锁协…...
踩着节日的小尾巴
节日快乐...
UG\NX二次开发 设置视图中心 UF_VIEW_set_center
文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 感谢粉丝订阅 感谢 a1794902437 订阅本专栏,非常感谢。 简介 UG\NX二次开发 设置视图中心 UF_VIEW_set_center。如果视图NULL_TAG,则使用工作视图。 效果 代码 #include &qu…...
leetcode做题笔记201. 数字范围按位与
给你两个整数 left 和 right ,表示区间 [left, right] ,返回此区间内所有数字 按位与 的结果(包含 left 、right 端点)。 示例 1: 输入:left 5, right 7 输出:4示例 2: 输入&…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
