浮点数中除以4与连续除以2两次是否恒等?

云墨大大_4168

云墨大大_4168

2026-06-30

285人浏览

原创

浮点数中除以4与连续除以2两次是否恒等?

在无溢出和下溢的前提下,对任意IEEE 754单/双精度浮点数x,x/4恒等于x/2/2,x4也恒等于x2*2,因为乘除2的整数次幂是精确运算,不引入舍入误差。

在无溢出和下溢的前提下,对任意ieee 754单/双精度浮点数x,x/4恒等于x/2/2,x*4也恒等于x*2*2,因为乘除2的整数次幂是精确运算,不引入舍入误差。

在IEEE 754浮点算术中,所有乘以或除以2的整数次幂(如2、4、8、0.5、0.25等)都是精确操作——前提是结果未超出可表示范围(即无溢出或下溢)。这是因为浮点数采用二进制科学计数法表示:
$$ x = (-1)^s \times (1 + f) \times 2^e $$
其中 $s$ 为符号位,$f$ 为尾数(fraction),$e$ 为指数。当执行 $x \times 2^k$ 或 $x / 2^k$(即 $x \times 2^{-k}$)时,仅需调整指数字段 $e \leftarrow e + k$,而尾数 $f$ 完全保持不变。只要新指数 $e + k$ 仍在合法范围内(单精度:$-126 \le e \le 127$;双精度:$-1022 \le e \le 1023$),该运算就不涉及任何舍入,属于“无损变换”。

因此:

  • x * 4 等价于 x * 2^2 → 指数加2;
  • x * 2 * 2 先指数加1,再加1 → 最终指数仍加2,尾数全程未变;
  • 同理,x / 4(即 x * 2^{-2})与 x / 2 / 2 均使指数减2,中间结果仍为正规数或非规格化数(只要未下溢),尾数始终保留原值。

✅ 验证示例(JavaScript,遵循IEEE 754双精度):

Rezi.ai
Rezi.ai

Rezi.ai是一款用于创建 ATS 友好简历、求职信和求职材料的 AI 简历工具。

下载
// 测试大量边界及典型值
const testCases = [
  1.23456789,
  Number.MAX_VALUE / 8,   // 接近上限但安全
  Number.MIN_NORMAL * 4,  // 接近下限但非下溢
  0, -0, Infinity, -Infinity
];

for (const x of testCases) {
  const a = x / 4;
  const b = x / 2 / 2;
  const c = x * 4;
  const d = x * 2 * 2;
  console.assert(Object.is(a, b), `x=${x}: x/4 !== x/2/2`);
  console.assert(Object.is(c, d), `x=${x}: x*4 !== x*2*2`);
}
console.log("All tests passed.");

⚠️ 注意事项:

  • ±0 的符号保持一致:-0 / 2 / 2 仍为 -0,与 -0 / 4 相同(符合IEEE 754规定);
  • NaN 和无穷大也满足恒等性:NaN/2/2 === NaN/4,Infinity/2/2 === Infinity/4;
  • 该性质仅适用于2的整数次幂:如 x/7/7 ≠ x/49(如问题中所示),因7非2的幂,每次除法均引入独立舍入误差;
  • 更广义结论:若表达式中仅含一次非2的幂的运算(如 /3 或 *5),其余均为 *2//2,则交换顺序不影响结果——例如 x/2/3 === x/3/2 === x/6,因为 /3 引入的舍入仅发生一次,且加法/乘法满足结合律与交换律在实数层面成立,而浮点实现中该唯一舍入点位置不影响最终结果(前提是无中间溢出)。

综上,在标准IEEE 754环境下,x/4 == x/2/2 与 x*4 == x*2*2 是严格成立的数学恒等式,而非经验性巧合——它是二进制浮点表示本质所决定的精确性保障。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

2023.10.24

5864

49

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

2524

5

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

2025.10.17

1652

13

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

20

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

0

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

0

12

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

2026.09.30

20

26

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

2026.09.29

20

15

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

220

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习