梅欽類公式

来自testwiki
跳转到导航 跳转到搜索

梅钦类公式(英语:Machin-like formula)是数学中计算圆周率的一个常用技巧,它是梅欽公式的推广,梅钦公式的形式为

π4=4arctan15arctan1239

梅钦依据此公式,把圆周率计算到一百多位小数。


梅钦类公式的形式为: Template:NumBlk

其中, anbn 为正 整数,且 an<bncn 为非零整数,且c0 为正整数。

梅钦类公式的应用可结合反正切函数泰勒级数展开:

Template:NumBlk

导出

根据角的和差公式

sin(α+β)=sinαcosβ+cosαsinβ
cos(α+β)=cosαcosβsinαsinβ

π2<arctana1b1+arctana2b2<π2.Template:NumBlk

反复应用这一方程,可得到所有的梅欽類公式,比如最初的梅欽公式:

2arctan15
=arctan15+arctan15
=arctan1×5+1×55×51×1
=arctan1024
=arctan512
4arctan15
=2arctan15+2arctan15
=arctan512+arctan512
=arctan5×12+5×1212×125×5
=arctan120119
4arctan15π4
=4arctan15arctan11
=4arctan15+arctan11
=arctan120119+arctan11
=arctan120×1+(1)×119119×1120×(1)
=arctan1239
π4=4arctan15arctan1239

用梅钦公式编程计算圆周率(C++)

#include<stdio.h>
#include<iostream>
using namespace std;
int main(void)
{   //本程序每四位数输出,如果请求计算的位数不是4的整数倍,最后输出可能会少1~3位数
	long a[2]={956,80},b[2]={57121,25},i=0,j,k,p,q,r,s=2,t,u,v,N,M=10000;
	printf("%9cMachin%6cpi=16arctan(1/5)-4arctan(1/239)\nPlease input a number.\n",32,32);
	cin>>N,N=N/4+3;
	long *pi=new long[N],*e=new long[N];
	while(i<N)pi[i++]=0;
	while(--s+1)
	{
		for(*e=a[k=s],i=N;--i;)e[i]=0;
		for(q=1;j=i-1,i<N;e[i]?0:++i,q+=2,k=!k)
			for(r=v=0;++j<N;pi[j]+=k?u:-u)u=(t=v*M+(e[j]=(p=r*M+e[j])/b[s]))/q,r=p%b[s],v=t%q;
	}
	while(--i)(pi[i]=(t=pi[i]+s)%M)<0?pi[i]+=M,s=t/M-1:s=t/M;
	for(cout<<"3.";++i<N-2;)printf("%04ld",pi[i]);
	delete []pi,delete []e,cin.ignore(),cin.ignore();
	return 0;
}

參考文獻