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

IEEE754 double 类型步长规律,从1.0的二进制表示、紧挨着1.0略大和略小的数开始归纳

 1. double 类型 1.0 的二进制表示

        在 IEEE 754 双精度(double)浮点数格式(64 位)中,给定的二进制表示 0011111111110000000000000000000000000000000000000000000000000000 对应于 1.0。其结构如下:

        符号位(1 位)0(正数)

        指数位(11 位)01111111111(十进制值 1023,实际指数为 1023 - 1023 = 0)

        尾数位(52 位)0000000000000000000000000000000000000000000000000000(隐含前导 1,因此尾数值为 1.0)

2.0 比1.0 略大的那个 double 数

        在浮点数表示中,相邻的可表示数是通过增加尾数的最小有效位(LSB)得到的。尾数有 52 位,因此最小可表示的增量(机器 epsilon)为 2^{-52}。由于当前指数为 0,步长为 2^0 \times 2^{-52} = 2^{-52}.

2. 紧挨着比 1.0 大的数的二进制表示

2.1. 略大的数

        要得到比 1.0 大的最小数,只需将尾数的最低有效位(LSB)从 0 改为 1,同时保持符号位和指数位不变:

        符号位0

        指数位01111111111(不变)

        尾数位:原为全 0,现在改为 0000000000000000000000000000000000000000000000000001(前 51 位为 0,最后一位为 1)

完整的 64 位二进制表示为:
0011111111110000000000000000000000000000000000000000000000000001

2.2. 比 1.0 大出了多少

这个新值对应于 1.0 + 2^{-52},因此它比 1.0 大 2^{-52}

        精确值:2^{-52} = \frac{1}{2^{52}} = \frac{1}{4503599627370496}

        十进制近似值:约 2.220446049250313 \times 10^{-16}

2.3. 验证

    新数的计算

          指数域 01111111111 = 1023,实际指数 e = 1023 - 1023 = 0

          尾数域 0000000000000000000000000000000000000000000000000001 对应尾数值 2^{-52}(因为最低位为 1,其余为 0)。

          隐含前导 1,因此实际尾数为 1 + 2^{-52}

          整体值:(1 + 2^{-52}) \times 2^0 = 1 + 2^{-52}

    差值(1 + 2^{-52}) - 1 = 2^{-52}

这个值确实是紧挨着 1.0 的下一个可表示浮点数,因为尾数增加最小单位不会导致指数变化(无溢出)。

3. 比1.0 略小的数

3.1. 重复表示1.0,免翻页

        在 IEEE 754 双精度浮点数格式(64 位)中,1.0 的二进制表示为:
0 01111111111 0000000000000000000000000000000000000000000000000000

                符号位0(正数)

                指数位01111111111(1023,实际指数为 0)

                尾数位:全 0(隐含前导 1,尾数值为 1.0)

3.2. 紧挨着 1.0 但比 1.0 小的数的二进制表示

       比 1.0 小的最大可表示数位于指数为 -1 的区间(即 2^{-1})。其表示如下:

                符号位0(正数)

                指数位01111111110(1022,实际指数为 -1)

                尾数位全 1(52 位全 1,表示最大尾数)

        完整 64 位二进制表示为:
0 01111111110 1111111111111111111111111111111111111111111111111111

3.3. 该数的值计算

                尾数值:隐含前导 1 + 小数部分,小数部分为 1 - 2^{-52}(全 1 的 52 位二进制值)。
                        尾数值 = 1 + (1 - 2^{-52}) = 2 - 2^{-52}

                实际指数:-1

                整体值:   (2 - 2^{-52}) \times 2^{-1} = \frac{2 - 2^{-52}}{2} = 1 - 2^{-53}

3.4. 比 1.0 小了多少

                差值: 1.0 - (1 - 2^{-53}) = 2^{-53}

                精确值2^{-53} = \frac{1}{2^{53}} = \frac{1}{9007199254740992}

                十进制近似值2^{-53}\approx 1.1102230246251565 \times 10^{-16}

3.5. 为什么是这个数

在 [0.5, 1) 区间(指数为 -1),浮点数的步长为 2^{-53}(因为指数为 -1 时,尾数最小单位 2^{-52} 对应值 2^{-1} \times 2^{-52} = 2^{-53} ;

该区间最大值是 1 - 2^{-53},紧邻 1.0 的下方,且无其他可表示数位于它与 1.0 之间;

1.0 是下一个区间 [1, 2) 的最小值,其与 1 - 2^{-53} 的差正好是区间步长 2^{-53}

4.0 步长规律

从 2^{-1}  到 2^0  之间的步长为 2^{-53} ;     (0.5, 1.0]

从 2^0    到 2^1  之间的步长为 2^{-52} ;     (1.0, 2.0]

2^1    到 2^2  之间的步长为 2^{-51} ;    (2.0, 4.0]

以此类推 ....

不过需要注意的是,我们仅仅在 正规浮点数的一个区间上寻找这里的规律。比如,亚正规浮点数的步长是等长的,可做进一步分析。

http://www.lryc.cn/news/617760.html

相关文章:

  • perl notes【1】
  • 【linux】企业级WEB应用服务器tomcat
  • 达梦数据库慢SQL日志收集和分析
  • 1.Apollo Planning 模块总结
  • 打破内网枷锁!TRAE SOLO + cpolar 让AI开发告别“孤岛困境”
  • 2025.8.6 图论(1)Solution
  • CI/CD渗透测试靶场
  • JavaEE初阶2.0
  • 基于MongoDB/HBase的知识共享平台的设计与实现
  • HBase BlockCache:LRU Cache
  • SQL179 每个6/7级用户活跃情况
  • 数学建模——灰色预测(GM11)
  • window显示驱动开发—创建多平面覆盖资源
  • 微服务架构下的精准测试与环境复制实践指南
  • PTE之路--04文
  • 使用Pytest进行接口自动化测试(三)
  • 集团型企业如何统一管控子公司权限?
  • 机器学习中数据集的划分难点及实现
  • 计算机网络:1、OSI参考模型和TCP/IP模型
  • scikit-learn/sklearn学习|岭回归解读
  • 高并发场景下分布式ID生成方案对比与实践指南
  • Mini-Omni: Language Models Can Hear, Talk While Thinking in Streaming
  • Mining of Real-world Hypergraphs part1-2 逐字翻译解读
  • react中父子数据流动和事件互相调用(和vue做比较)
  • 剑桥大学最新研究:基于大语言模型(LLM)的分子动力学模拟框架,是MD的GPT时刻还是概念包装?
  • 机器翻译:Bahdanau注意力和Luong注意力详解
  • HarmonyOS AI辅助编程工具(CodeGenie)概述
  • 鸿蒙flutter项目接入极光推送
  • golang包管理工具中 GOPATH 与 Go Modules 的区别总结
  • 新人如何简化学习Vue3文件