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

Python实战:五种算法对决圆周率计算,谁更胜一筹?

1. 圆周率计算从古至今的数学追求圆周率π这个神奇的数字从古至今一直吸引着无数数学家和编程爱好者的目光。作为一个无限不循环小数π的计算方法层出不穷每种算法都体现了不同的数学思想和计算技巧。今天我们就用Python来实现五种经典的π计算算法看看它们各自有什么特点。记得我第一次接触π的计算是在大学数学课上教授用割圆法演示如何通过正多边形逼近圆形。当时觉得这种几何方法非常直观但真正动手实现时才发现里面藏着不少编程技巧。后来接触了更多算法每种都让我大开眼界 - 有用随机数撒点的蒙特卡洛法也有看起来像魔法公式的拉马努金公式。在Python中实现这些算法特别有意思因为我们可以直观地看到不同方法的计算过程和精度差异。下面我就带大家一一实现这五种算法并分析它们的优缺点。无论你是Python初学者还是数学爱好者相信都能从中找到乐趣。2. 割圆法几何直观的经典方法2.1 算法原理与实现割圆法是最古老的π计算方法之一由我国古代数学家刘徽提出。其核心思想很简单用正多边形逼近圆形。随着边数增加正多边形的周长会越来越接近圆的周长。让我们来看Python实现的关键部分import math def zu(n): def f(x): # 由当前边长求割后边长 h 1 - math.sqrt(1-(x/2)**2) return math.sqrt(h**2 (x/2)**2) a 1 # 初始边长 k 6 # 初始边数六边形 for _ in range(n): a f(a) k * 2 return a * k / 2这个实现有几个巧妙之处使用嵌套函数f(x)来计算每次分割后的新边长初始设置为单位圆内接正六边形每次迭代边数翻倍逐步逼近圆形我实测发现分割15次边数196608时可以得到3.141592653589793的π值与math.pi完全一致。但超过20次分割后由于浮点数精度限制结果反而会变差。2.2 精度与性能分析割圆法的优点是原理直观容易理解。但它的收敛速度不算快属于线性收敛。每次分割边数翻倍但精度提升有限。下面是不同分割次数下的精度对比分割次数边数计算结果误差51923.141452470.000140181061443.1415921050.000000548151966083.1415926535890.00000000000从实现角度看割圆法适合教学演示但在实际应用中效率不高。不过它展现了如何用几何方法解决数学问题这种思想至今仍在计算机图形学中有广泛应用。3. 无穷级数法优雅的数学公式3.1 莱布尼茨公式实现无穷级数法利用π的级数展开式来计算最著名的是莱布尼茨公式π/4 1 - 1/3 1/5 - 1/7 1/9 - ...Python实现如下def leibniz_of_pi(error): pi 0 n 1 while True: term 1 / n * (-1) ** (n//2 % 2) # 正负交替 if abs(term) error: break pi term n 2 return pi * 4这个实现有几个注意点使用(-1)**(n//2 % 2)来生成交替的正负号只在绝对值小于阈值时停止计算最后需要乘以4得到π值有趣的是这个看似简单的级数收敛极慢。要达到3.14159265的精度需要计算超过500万项我在笔记本上测试计算到1000万项耗时约4秒精度达到小数点后7位。3.2 级数法的变体与优化除了莱布尼茨公式还有收敛更快的级数如马青公式π/4 4arctan(1/5) - arctan(1/239)这个公式的Python实现只需要几行import math def machin_pi(): return 4*(4*math.atan(1/5) - math.atan(1/239))实测这个公式一次计算就能得到15位精确的π值效率极高。级数法的优势在于实现简单但不同级数的收敛速度差异巨大。选择适当的级数对计算效率至关重要。4. 蒙特卡洛法随机的艺术4.1 算法原理与Python实现蒙特卡洛法采用完全不同的思路 - 利用随机采样和概率统计来估算π值。方法是在单位正方形内随机撒点统计落在内切圆内的比例。import random def monte_carlo_pi(num): inside 0 for _ in range(num): x, y random.random(), random.random() if (x-0.5)**2 (y-0.5)**2 0.25: inside 1 return (inside / num) * 4这个算法的美妙之处在于其简单性在[0,1]×[0,1]正方形内均匀撒点检查点是否落在半径为0.5的圆内用比例估算π值4.2 精度与收敛特性蒙特卡洛法的收敛速度是O(1/√n)意味着要提高一位精度需要100倍更多的采样点。下面是不同采样量下的结果采样点数计算结果误差1,0003.1320.009610,0003.15080.0092100,0003.141080.000511,000,0003.1413360.000256虽然收敛慢但蒙特卡洛法展示了概率统计的强大能力。这种方法特别适合并行计算因为每个点的判断都是独立的。我在8核CPU上测试使用多进程可以将百万级采样计算时间从0.4秒降到0.1秒。5. 拉马努金公式数学天才的神来之笔5.1 公式解析与实现印度数学天才拉马努金发现的这个公式堪称神奇1/π (2√2)/9801 Σ (4k)!(110326390k)/(k!⁴ 396⁴ᵏ)Python实现如下import math def ramanujan_pi(n): total 0 for k in range(n): numerator math.factorial(4*k) * (1103 26390*k) denominator math.factorial(k)**4 * 396**(4*k) total numerator / denominator return 9801 / (total * 2 * math.sqrt(2))这个公式的收敛速度快得惊人 - 每计算一项就能增加约8位精度计算5项就能得到15位精确的π值。5.2 计算优化与注意事项实现时需要注意几点大数阶乘计算可能导致溢出可以使用对数或分步计算分母的396⁴ᵏ增长极快需要注意数值范围可以预先计算√2等常量提升效率我在实现时发现使用Python的decimal模块可以进一步提高精度。设置28位小数精度后计算10项就能得到70多位精确的π值。这种超线性收敛的公式在现代π计算中应用广泛展示了数学公式的惊人力量。6. 算法对比与实战建议6.1 五种算法全方位对比让我们从多个维度比较这些算法算法收敛速度实现难度计算效率适用场景割圆法线性中等低教学演示莱布尼茨极慢简单极低历史研究马青公式超快简单极高通用计算蒙特卡洛1/√n简单中并行计算演示拉马努金超线性复杂高高精度计算6.2 实战选择建议根据不同的需求我会这样推荐教学演示割圆法或蒙特卡洛法直观易懂日常使用马青公式简单高效高精度计算拉马努金公式配合decimal模块并行计算练习蒙特卡洛法容易并行化在实际项目中Python的math.pi已经足够精确。但这些算法的实现过程对理解数学和编程的融合非常有帮助。我在教学中发现让学生实现这些算法能显著提升他们的算法思维和编程能力。

相关文章:

Python实战:五种算法对决圆周率计算,谁更胜一筹?

1. 圆周率计算:从古至今的数学追求 圆周率π这个神奇的数字,从古至今一直吸引着无数数学家和编程爱好者的目光。作为一个无限不循环小数,π的计算方法层出不穷,每种算法都体现了不同的数学思想和计算技巧。今天我们就用Python来实…...

Alpamayo-R1-10B实际应用:车载边缘设备轻量化部署可行性分析

Alpamayo-R1-10B实际应用:车载边缘设备轻量化部署可行性分析 1. 引言 想象一下,一辆自动驾驶汽车行驶在复杂的城市街道上。它需要同时“看”到前方的红绿灯、左侧的自行车、右侧的变道车辆,还要理解“安全通过前方十字路口”这个指令&#…...

杰理AC696X蓝牙音箱方案实战:手把手教你修改RDA5807驱动,解锁日本FM频段(76-90MHz)

杰理AC696X蓝牙音箱方案实战:RDA5807驱动深度定制与日本FM频段适配指南 在全球化市场中,蓝牙音箱产品的本地化适配往往成为决定成败的关键细节。日本作为全球第三大音乐消费市场,其独特的76-90MHz FM频段标准让许多国际品牌的产品遭遇"水…...

别再手动截图了!用Lumerical脚本批量导出FDTD仿真数据(附Python处理代码)

别再手动截图了!用Lumerical脚本批量导出FDTD仿真数据(附Python处理代码) 在光子器件设计与优化的日常工作中,工程师们常常需要面对数十组参数扫描产生的海量仿真数据。记得去年参与硅基光栅耦合器项目时,每次完成50组…...

新手司机必看:直角转弯时,如何利用‘内轮差’原理避免剐蹭(附真实场景图解)

新手司机必看:直角转弯时,如何利用‘内轮差’原理避免剐蹭(附真实场景图解) 刚拿到驾照的小王最近遇到一件烦心事:在小区狭窄的直角转弯处,明明车头已经顺利通过,车身侧面却和路缘石来了个"…...

别再怕LEC不过了!Cadence Formal工具保姆级配置流程与避坑指南

从零通关Cadence Formal验证:LEC全流程避坑实战手册 刚接触Cadence Formal工具的新手工程师,面对LEC(Logic Equivalence Checking)验证时,常被各种模式切换、命令格式和特殊cell匹配等问题困扰。本文将带你完整走通SET…...

从虚拟机到“云主机”:教你用内网穿透(frp/花生壳)把本地Win/Linux服务器暴露到公网

从本地开发到公网访问:内网穿透技术实战指南 你是否遇到过这样的困境?在本地虚拟机中精心搭建的Web服务或API接口,却因为缺乏公网IP而无法让同事或客户实时查看。传统的云服务器方案不仅成本高昂,配置过程也相当繁琐。本文将带你探…...

CANoe测试参数管理进阶:把.ini文件当成你的轻量级数据库来用

CANoe测试参数管理进阶:把.ini文件当成你的轻量级数据库来用 在汽车电子测试领域,参数管理一直是提升测试效率和可维护性的关键环节。当测试项目从简单的功能验证升级到复杂的台架或HIL测试时,测试工程师们常常面临一个现实问题:如…...

智能体走向企业核心,Microsoft AI Tour 上海站呈现前沿企业转型全图景

上海,4月21日 —— Microsoft AI Tour 年度盛会今日在上海世博中心举行。大会汇集来自多个市场的前沿创新实践,围绕企业迈向智能体时代过程中最为关键的AI 规模化落地与转型路径,微软在大会上集中展示了过去三个月内的一系列关键技术进展&…...

谷歌推出两款全新TPU芯片,驱动AI训练与推理新浪潮

谷歌有限责任公司在2026年谷歌云Next大会上发布了两款专为人工智能设计的定制芯片,推出了分别面向训练与推理任务的两种张量处理器(TPU)架构:第八代TPU 8t与TPU 8i。谷歌表示,这两款芯片的设计初衷是应对下一代AI工作负…...

告别盲人摸象:用Python脚本模拟Tester,手把手带你玩转UDS诊断(ISO 14229)

告别盲人摸象:用Python脚本模拟Tester,手把手带你玩转UDS诊断(ISO 14229) 在汽车电子开发与测试领域,UDS(Unified Diagnostic Services)协议作为ISO 14229标准的核心,已成为ECU诊断的…...

WinForm 中轻松绘制实时曲线,彻底告别图表控件焦虑

前言工业监控、科学实验或金融分析等场景中,数据可视化是不可或缺的一环。尤其当面对动态变化的实时数据时,如何高效、清晰地呈现趋势与异常,成为上位机软件开发的关键挑战。传统的图表控件往往功能有限、扩展性差,而完全自绘又耗…...

告别Errno 5!保姆级教程:用Rufus制作NTFS格式Ubuntu启动盘,完美解决双系统安装报错

彻底解决Ubuntu双系统安装中的Errno 5错误:NTFS启动盘制作全指南 当你在Windows电脑上尝试安装Ubuntu双系统时,是否遇到过这样的场景:安装过程看似顺利,却在最后阶段突然弹出"[Errno 5] Input/output error"的错误提示&…...

语言模型记忆架构:KV与FFN记忆技术解析

1. 语言模型记忆架构:从理论到实践的深度解析在当今大规模语言模型(LLM)快速发展的背景下,如何高效地存储和检索海量知识成为关键挑战。传统Transformer架构将所有知识编码在稠密参数中,导致模型体积庞大且推理效率低下…...

Edge浏览器油猴插件Tampermonkey保姆级配置指南:从安装到脚本管理全流程

Edge浏览器Tampermonkey终极配置指南:从新手到脚本管理大师 在浏览器扩展生态中,Tampermonkey(俗称"油猴")无疑是提升效率的神器。它像是一个万能遥控器,通过安装各种脚本,可以解锁网页的隐藏功能…...

Kaggle老手都在用的随机森林调参避坑指南:从特征重要性到OOB误差的实战技巧

Kaggle老手都在用的随机森林调参避坑指南:从特征重要性到OOB误差的实战技巧 在数据科学竞赛和工业级模型优化中,随机森林因其出色的表现和相对简单的调参流程,成为众多从业者的首选算法。然而,真正掌握随机森林的调参技巧&#xf…...

别再乱叠层了!四层、六层、八层PCB板分层实战指南(附Altium Designer设置要点)

多层PCB设计实战:从四层到八层的叠层策略与Altium Designer实现 在高速数字电路和射频系统设计中,PCB叠层结构的选择直接影响信号完整性、电源分配和电磁兼容性。许多工程师在面对四层、六层和八层板设计时,常常陷入"层数越多越好"…...

保姆级教程:用Wireshark抓包+rsyslogd -dn调试,5分钟定位你的日志转发故障

运维侦探实战:三大利器精准定位日志转发故障 日志系统是运维工程师的"眼睛",但当这双眼睛突然失明时,如何快速恢复视力?想象一下凌晨三点,你被警报吵醒,发现关键业务日志全部失踪,而明…...

终极B站视频下载指南:3分钟掌握跨平台批量下载技巧

终极B站视频下载指南:3分钟掌握跨平台批量下载技巧 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/B…...

别等出事再翻手册!给华为云Stack做个“体检”:手把手搭建你的应急预案知识库与演练沙盒

华为云Stack主动防御体系:构建高可用应急预案与实战演练系统 当云平台突发故障时,翻阅厚达数百页的应急预案手册绝非理想选择。本文将揭示如何将华为云Stack的应急预案转化为可即时调用的"数字肌肉记忆",通过系统化知识库与沙盒演练…...

如何快速掌握IDR:终极Delphi反编译器完整指南 [特殊字符]

如何快速掌握IDR:终极Delphi反编译器完整指南 🚀 【免费下载链接】IDR Interactive Delphi Reconstructor 项目地址: https://gitcode.com/gh_mirrors/id/IDR IDR(Interactive Delphi Reconstructor)是一款专为Windows环境…...

DistroAV NDI插件终极配置指南:从零构建专业音视频网络

DistroAV NDI插件终极配置指南:从零构建专业音视频网络 【免费下载链接】obs-ndi DistroAV (formerly OBS-NDI): NDI integration for OBS Studio 项目地址: https://gitcode.com/gh_mirrors/ob/obs-ndi DistroAV(原OBS-NDI)是专为OBS…...

避坑指南:在VisionMaster二次开发中调用OpenCV等第三方DLL的完整流程与常见问题

VisionMaster二次开发中集成OpenCV的九大避坑实战指南 当你在VisionMaster平台上尝试扩展视觉算法能力时,OpenCV往往是首选工具库。但许多工程师在集成过程中都遭遇过这样的困境:明明在VS中编译通过,一部署到VisionMaster环境就频繁报错。本文…...

告别Keil!用STM32CubeIDE+GCC+J-Link从零点亮STM32G030的LED(保姆级图文)

从零构建STM32G030开发环境:基于开源工具链的实战指南 在嵌入式开发领域,商业IDE长期占据主导地位,但开源工具链的成熟让开发者有了更多选择。本文将手把手带您使用STM32CubeIDEGCCJ-Link这套完全免费的工具组合,在STM32G030C8T6开…...

VideoDownloadHelper:智能网页视频解析与下载的Chrome扩展解决方案

VideoDownloadHelper:智能网页视频解析与下载的Chrome扩展解决方案 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 在当今数字化学…...

Better BibTeX架构深度解析:为LaTeX用户提供高效文献管理解决方案

Better BibTeX架构深度解析:为LaTeX用户提供高效文献管理解决方案 【免费下载链接】zotero-better-bibtex Make Zotero effective for us LaTeX holdouts 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-better-bibtex Better BibTeX (BBT) 作为Zotero…...

基于Gemini AI的视频会议智能分析与结构化提取

1. 项目概述:从视频会议中提取结构化洞察的智能工作流作为一名长期从事AI和MLOps实践的工程师,我经常需要处理大量视频会议记录。每次会议结束后,那些关键决策、待办事项和技术细节就像沙滩上的字迹,随着时间流逝逐渐模糊。传统的…...

打造企业级网络监控:自定义插件开发终极指南

打造企业级网络监控:自定义插件开发终极指南 【免费下载链接】SmokePing The Active Monitoring System 项目地址: https://gitcode.com/gh_mirrors/smo/SmokePing 在当今复杂的网络环境中,构建可靠的自定义网络监控插件已成为技术团队的核心竞争…...

别再死记硬背Fama-French模型了!用Python实战带你搞懂因子投资的核心逻辑

用Python实战拆解Fama-French三因子模型:从数据获取到策略回测全流程 在量化投资的工具箱里,Fama-French三因子模型就像瑞士军刀般经典。但大多数教程要么停留在理论推导,要么给出黑箱代码。本文将用Jupyter Notebook逐行演示如何用Python实现…...

无名杀:在浏览器中体验三国杀策略对决的现代开源方案

无名杀:在浏览器中体验三国杀策略对决的现代开源方案 【免费下载链接】noname 项目地址: https://gitcode.com/GitHub_Trending/no/noname 想象一下,一款经典的三国杀卡牌游戏,无需安装任何客户端,直接在浏览器中就能畅玩…...