π=3.1415926……无穷多位, 历史上很多人都在计算这个数, 一直认为是一个非常复杂的问题。现在有了电脑, 这个问题就简单了。
电脑可以利用级数计算出很多高精度的值, 有关级数的问题请参考《高等数学》,以下是比较有名的有关π的级数:
π = 2 + 2/3 + 2/3*2/5 + 2/3*2/5*3/7 + ...
例程:
/*这是一位大神编制的算pi程序,精确到800位,具体算法已不可考*/
#include
int main()
{
long a=10000,b=0,c=3500,d=0,e=0,f=0,g[3501];
for(;b-c;)g[b++]=a/5;
for(;d=0,f=c*2;c-=14,printf( "%.4d ",e+d/a),e=d%a)
for(b=c;d+=g[b]*a,g[b]=d%--f,d/=f--,--b;d*=b);
reutrn 0;
}
double精度不够,只有用数组模拟了。
楼上的程序不正确,我改了下
#include
int main()
{
long a=10000,b=0,c=3500,d=0,e=0,f=0,g[3501];
for(;b-c;)g[b++]=a/5;
for(;d=0,f=c*2;c-=14,printf( "%.4d ",e+d/a),e=d%a)
for(b=c;d+=g[b]*a,g[b]=d%--f,d/=f--,--b;d*=b);
}
可以用如下程序:
注:先输入要几位小数
#include
#include
using namespace std;
int main()
{
long a=10000,b=0,d=0,e=0,f=0,i,j;
cin>>i;
j=i/288*1000;
long c=j,g[j+1];
while(b-c)
{
g[b++]=a/5;
}
while(d=0,f=c*2)
{
b=c;
while(d+=g[b]*a,g[b]=d%--f,d/=f--,--b)
{
d*=b;
}
c-=14;
printf("%.4d ",e+d/a);
e=d%a;
}
getchar();getchar();
return 0;
}
long a=10000,b,c=3500,d,e,f,g[3501];
for(;b-c;)g[b++]=a/5;
for(;d=0,f=c*2;c-=14,printf( "%.4d ",e+d/a),e=d%a)
for(b=c;d+=g[b]*a,g[b]=d%--f,d/=f--,--b;d*=b);
这个是100位程序
#include
main()
{
double i,pi=1;
for(i=5;i<=1000000;i=i+4)
{
pi=pi-1/(i-2)+1/i;
}
pi=pi*4;
printf("\n3.100%lf",pi);
}