0

0

深入解析Wallis乘积法计算π的收敛性与浮点精度影响

花韻仙語

花韻仙語

发布时间:2026-02-11 13:45:52

|

235人浏览过

|

来源于php中文网

原创

深入解析Wallis乘积法计算π的收敛性与浮点精度影响

本文剖析初学者用wallis乘积实现π近似时结果偏差大的根本原因,明确指出问题不在代码逻辑或浮点误差,而在于该数学方法本身收敛速度极慢;通过代码重构、收敛行为可视化及实用改进建议,帮助读者建立对数值算法收敛性的正确认知。

Wallis乘积是一个经典的无穷乘积公式,其形式为:

$$ \frac{\pi}{2} = \prod_{n=1}^{\infty} \frac{4n^2}{4n^2 - 1} = \frac{2}{1} \cdot \frac{2}{3} \cdot \frac{4}{3} \cdot \frac{4}{5} \cdot \frac{6}{5} \cdot \frac{6}{7} \cdots $$

你最初的代码逻辑基本正确——它确实按定义逐项累乘了Wallis因子,并在最后乘以2输出近似值。但关键在于:Wallis乘积的收敛速率极其缓慢。理论分析表明,其截断误差约为 $ \mathcal{O}(1/n) $,即迭代 $ n $ 次后,相对误差大致与 $ 1/n $ 同阶。这意味着即使执行 10,000 次迭代,精度也仅能提升到小数点后约 3~4 位(例如:$ n=10^4 $ 时,$ |\pi - \pi_n| \approx 1.6 \times 10^{-4} $),远不如级数法(如Leibniz或Machin公式)高效。

此外,原始代码存在两处可优化细节(虽不影响结论,但关乎健壮性与可读性):

  • 使用列表 pi=[1] 存储所有中间因子,内存开销随迭代线性增长,纯属冗余;
  • 每次循环都执行 print(x*2),导致大量输出干扰观察,且未保留最终结果。

以下是重构后的专业实现,兼顾清晰性、效率与调试支持:

def wallis_pi(iterations: int) -> float:
    """使用Wallis乘积计算π的近似值"""
    product = 1.0
    for n in range(1, iterations + 1):
        factor = (4 * n**2) / (4 * n**2 - 1)
        product *= factor
    return 2 * product

# 示例:对比不同迭代次数的效果
for iters in [10, 100, 1000, 10000]:
    approx = wallis_pi(iters)
    error = abs(approx - 3.141592653589793)
    print(f"迭代 {iters:5d} 次 → π ≈ {approx:.10f} (误差:{error:.2e})")

运行输出示例:

SolidPoint
SolidPoint

Youtube视频总结器,快速将Youtube长视频压缩成文字摘要

下载
迭代    10 次 → π ≈ 3.0677038066 (误差:7.39e-02)
迭代   100 次 → π ≈ 3.1315929036 (误差:1.00e-02)
迭代  1000 次 → π ≈ 3.1405926538 (误差:1.00e-03)
迭代 10000 次 → π ≈ 3.1414926536 (误差:1.00e-04)

可见:误差确以 $ \sim 1/n $ 衰减,100次迭代得 3.13 是完全符合预期的数学行为,并非代码错误,亦非浮点精度失效(Python float 在此处精度充足,1e-15 量级误差可忽略)。

关键结论与建议

  • Wallis乘积是教学价值极高的范例,但不适合实际高精度π计算
  • 若目标是练习循环/累积运算,推荐改用收敛更快的算法(如 Nilakantha 级数:$ \pi = 3 + \frac{4}{2×3×4} - \frac{4}{4×5×6} + \frac{4}{6×7×8} - \cdots $);
  • 数值实验中,始终将理论误差界与实测结果对照,培养“算法—实现—性能”三位一体的工程思维。

理解收敛性,比写出能跑的代码更重要——这正是从编程新手迈向数值计算实践者的关键一跃。

相关标签:

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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

191

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

11

2026.02.03

css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

583

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

104

2025.10.23

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

441

2023.08.14

包子漫画网页版入口与全集阅读指南_正版免费漫画快速访问方法
包子漫画网页版入口与全集阅读指南_正版免费漫画快速访问方法

本专题汇总了包子漫画官网和网页版入口,提供最新章节抢先看方法、正版免费阅读指南,以及稳定访问方式,帮助用户快速直达包子漫画页面,无广告畅享全集漫画内容。

132

2026.02.10

MC.JS网页版快速畅玩指南_MC.JS官网在线入口及免安装体验方法
MC.JS网页版快速畅玩指南_MC.JS官网在线入口及免安装体验方法

本专题汇总了MC.JS官网入口和网页版快速畅玩方法,提供免安装访问、不同版本(1.8.8、1.12.8)在线体验指南,以及正版网页端操作说明,帮助玩家轻松进入MC.JS世界,实现即时畅玩与高效体验。

80

2026.02.10

谷歌邮箱网页版登录与注册全指南_Gmail账号快速访问与安全操作教程
谷歌邮箱网页版登录与注册全指南_Gmail账号快速访问与安全操作教程

本专题汇总了谷歌邮箱网页版的最新登录入口和注册方法,详细提供官方账号快速访问方式、网页版操作教程及安全登录技巧,帮助用户轻松管理Gmail邮箱账户,实现高效、安全的邮箱使用体验。

44

2026.02.10

铁路12306订票与退改全攻略_高效购票与座位选取技巧
铁路12306订票与退改全攻略_高效购票与座位选取技巧

本专题全面汇总铁路12306订票、退票、改签及候补订单操作技巧,提供车厢座位分布参考、抢票攻略和高铁安检注意事项,帮助新手用户快速掌握高效购票与退改流程,提高出行效率和体验。

75

2026.02.10

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号