求圆周率的各种方法

求圆周率π!你能想到的有多少种方法呢?
今天对圆周率的求解方法作个整理、总结,因为感觉它挺好玩的。
(对于π的演算历史,可见百度π。最新的记录是2011年10月日本职员将小数点算到了10万亿位!!这得闲的有多蛋疼啊。。)


方法一:等积代换

这应该是最原始的解法了,把圆切成一个多边形,然后求出多边形的面积S。当这个多边形足够多边的时候,它的面积就近似等于圆面积了,然后由面积等式 π·r² = S 就可以得到 π 的近似解。我去百度盗了个图,show一下怎么切圆:
这里写图片描述
这个很容易理解,中学课本上也有很多介绍,叫割圆法。我们几个中华老祖就是用这种方法求的,只是当时没有计算机,分割的三角形有限,如今用计算机模拟的话会快得多,精确的多。


方法二:概率试验

概率统计中有个著名的蒲丰投针试验大家可记得?
投针的步骤如下:
1)、取一张白纸,在上面画上许多条间距为a的平行线。
2)、取一根长度为l(l=a/2) 的针,随机地向画有平行直线的纸上掷n次,观察针与直线相交的次数,记为m。
3)、计算针与直线相交的概率.
可以通过数学推导,得出这个概率为p=2l/(πa),其中π是圆周率。我们可以由此求出π的值!具体的推导见此


方法三:莱布尼茨级数

这里写图片描述


外篇

其实这篇博客的主要目的是和大家分享一下网上某神级代码,区区几行代码,瞬间求出八百位 π 值:

#include<stdio.h>
long a=10000,b,c=2800,d,e,f[2801],g;
main(){for(;b-c;)   f[b++]=a/5;
    for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
        for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);}

这里写图片描述

原文地址:https://www.cnblogs.com/Bone-ACE/p/4531296.html