鱼C论坛

 找回密码
 立即注册
查看: 115|回复: 1

圆周率的问题

[复制链接]
头像被屏蔽
发表于 2025-4-4 14:10:58 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-4-4 14:11:47 | 显示全部楼层
Python计算圆周率的几种常见方法

方法1:使用math模块(直接获取高精度值)

  1. import math
  2. print(math.pi)  # 输出:3.141592653589793
复制代码


方法2:蒙特卡洛方法(概率模拟)

  1. import random

  2. def monte_carlo_pi(n):
  3.     count = 0
  4.     for _ in range(n):
  5.         x, y = random.random(), random.random()
  6.         if x**2 + y**2 <= 1:
  7.             count += 1
  8.     return 4 * count / n

  9. print(monte_carlo_pi(1000000))  # 示例输出:3.141764(精度随迭代次数增加)
复制代码


方法3:莱布尼茨级数(收敛较慢)

  1. def leibniz_pi(iterations):
  2.     pi = 0
  3.     sign = 1
  4.     for i in range(1, iterations*2, 2):
  5.         pi += sign * (4 / i)
  6.         sign *= -1
  7.     return pi

  8. print(leibniz_pi(1000000))  # 约需要百万次迭代达到3.14159精度
复制代码


方法4:Chudnovsky算法(高精度快速收敛)

  1. from decimal import Decimal, getcontext

  2. def chudnovsky_pi(precision):
  3.     getcontext().prec = precision+2
  4.     C = 426880 * Decimal(10005).sqrt()
  5.     M = 1
  6.     L = 13591409
  7.     X = 1
  8.     K = 6
  9.     S = L
  10.     for i in range(1, precision//14+1):
  11.         M = M * (K**3 - 16*K) // (i**3)
  12.         L += 545140134
  13.         X *= -262537412640768000
  14.         S += Decimal(M * L) / X
  15.     return C / S

  16. print(chudnovsky_pi(100))  # 计算100位精度
复制代码


  • 蒙特卡洛法适合理解概率思想,但精度最低
  • 莱布尼茨级数简单但收敛缓慢
  • Chudnovsky算法适合需要高精度的场景
  • 日常使用直接调用 math.pi 即可


注意:BBCode格式下无法显示代码高亮,实际使用时建议复制到Python环境中运行测试。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-5 18:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表