求圆周率π一万位程序分析

这篇博客深入分析了一个仅四行代码的C程序,该程序能够计算π的前800位。通过展开和简化代码,揭示了程序如何利用数学公式和迭代方法逐步逼近π的值。程序基于一个迭代公式,通过不断除法和存储余数来提高精度。尽管代码看似复杂,但其实现了π计算的高效算法,展示了计算机科学与数学的巧妙结合。
摘要由CSDN通过智能技术生成

先贴一段维基百科的内容:

计算机时代计算π

上万位以上的小数位值通常利用高斯-勒让德算法波温算法;另外以往亦曾使用于1976年发现的萨拉明-布伦特算法

第一个π和1/π的小数点后首一百万位利用了古腾堡计划。最新纪录是2002年9月得出的1,241,100,000,000个小数位,由拥有1TB主内存的64-node日立超级计算机,以每秒200亿运算速度得出,比旧纪录多算出一倍(206亿小数位)。此纪录由以下梅钦类公式得出:

 \frac{\pi}{4} = 12 \arctan\frac{1}{49} + 32 \arctan\frac{1}{57} - 5 \arctan\frac{1}{239} + 12 \arctan\frac{1}{110443} (K. Takano,  1982年)
 \frac{\pi}{4} = 44 \arctan\frac{1}{57} + 7 \arctan\frac{1}{239} - 12 \arctan\frac{1}{682} + 24 \arctan\frac{1}{12943} (F. C. W. Störmer,  1896年)

这么多的小数位没什么实用价值,只用以测试超级计算机

1996年,David H. Bailey、Peter Borwein及西蒙·普劳夫发现了π的其中一个无穷级数:

\pi = \sum_{k = 0}^{\infty} \frac{1}{16^k}
\left( \frac{4}{8k + 1} - \frac{2}{8k + 4} - \frac{1}{8k + 5} - \frac{1}{8k + 6}\right)

以上述公式可以计算π的第n二进制十六进制小数,而不需先计算首n-1个小数位。此类π算法称为贝利-波尔温-普劳夫公式。请参考Bailey's website 上相关程式

法布里斯·贝拉1997年给出了计算机效率上高出上式47%的BBP算法:

\pi = \frac{1}{2^6} \sum_{n=0}^{\infty} \frac{​{(-1)}^n}{2^{10n}} \left( - \frac{2^5}{4n+1} - \frac{1}{4n+3} + \frac{2^8}{10n+1} - \frac{2^6}{10n+3} - \frac{2^2}{10n+5} - \frac{2^2}{10n+7} + \frac{1}{10n+9} \right)

请参考Fabrice Bellard's PI page 。

其他计算圆周率的公式包括:

 \frac{1}{\pi} = \frac{2\sqrt{2}}{9801} \sum^\infty_{k=0} \frac{(4k!)(1103+26390k)}{(k!)^4 396^{4k}}  (拉马努金Ramanujan)
 \frac{1}{\pi} = 12 \sum^\infty_{k=0} \frac{(-1)^k (6k)! (13591409 + 545140134k)}{(3k)!(k!)^3 640320^{3k + 3/2}}  (David Chudnovsky及Gregory Chudnovsky)
\pi = \frac {426880 \sqrt {10005}} {\sum_{k=0}^\infty \frac {(6n)!\ (545140134n + 13591409)} { (n!)^3\ (3n)!\ (-640320)^3n}} [2]

编写计算机程序时,也可以利用反三角函数直接定义\pi值,但是编译器必须具备三角函数的函式库:
利用正弦函数

\sin\left(\pi / 2 \right)=1
\pi=2*\arcsin\left(1 \right)

利用

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PegasusWang_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值