圆周率前1000位省略到多少位

2799人阅读
[推荐]计算圆周率 Pi (&)值, 精确到小数点后 10000 位 精确到小数点后面 1000 位再测试一下:在 Form 上再放一个按钮 Button2, 在这个按钮的 onClick 事件写:void __fastcall TForm1::Button2Click(TObject *Sender){& const ARRSIZE=1010, DISPCNT=1000; //定义数组大小,显示位数& char x[ARRSIZE], z[ARRSIZE]; //x[0] x[1] . x[2] x[3] x[4] .... x[ARRSIZE-1]& int a=1, b=3, c, d, Run=1, Cnt=0;
& memset(x,0,ARRSIZE);& memset(z,0,ARRSIZE);
& x[1] = 2;& z[1] = 2;
& while(Run && (++Cnt&))& {&&& //z*=a;&&& d = 0;&&& for(int i=ARRSIZE-1; i&0; i--)&&& {&&&&& c = z[i]*a +&&&&& z[i] = c % 10;&&&&& d = c / 10;&&& }&&& //z/=b;&&& d = 0;&&& for(int i=0; i&ARRSIZE; i++)&&& {&&&&& c = z[i]+d*10;&&&&& z[i] = c /&&&&& d = c %&&& }&&& //x+=z;&&& Run = 0;&&& for(int i=ARRSIZE-1; i&0; i--)&&& {&&&&& c = x[i] + z[i];&&&&& x[i] = c%10;&&&&& x[i-1] += c/10;&&&&& Run |= z[i];&&& }&&& a++;&&& b+=2;& }& Memo1-&Text = AnsiString().sprintf("计算了 %d 次/r/n",Cnt);& Memo1-&Text = Memo1-&Text + AnsiString().sprintf("Pi=%d%d./r/n", x[0],x[1]);& for(int i=0; i&DISPCNT; i++)& {&&& if(i && ((i%100)==0))&&& Memo1-&Text = Memo1-&Text + "/r/n";&&& Memo1-&Text = Memo1-&Text + (int)x[i+2];& }}
按 Button2 执行结果:
Pi=03.0679819612736094491251329235185973031989
这下心理有底了, 是不是改变数组大小就可以计算更多位数呢?答案是肯定的。如果把定义数组大小和显示位数改为:
const ARRSIZE=10100, DISPCNT=10000; //定义数组大小,显示位数
执行结果精度可达 10000 位:
Pi=03.06798196127360944912513292351859730319893151
... 限于篇幅, 这里就省略了, 还是留给你自己来算吧!
提高精度的原理:
以上程序的原理是利用数组把计算结果保存起来, 其中数组每一项保存10进制数的一位,小数点定位在数组第1个数和第二个数之间, 即小数点前面2位整数, 其余都是小数位。
利用电脑模拟四则运算的笔算方法来实现高精度的数据计算,没想到最原始的方法竟然是精度最高的。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:47162次
排名:千里之外只需30多句代码计算圆周率 Pi (π)值, 精确到小数点后 10000 位
欢迎访问编程爱好者网站
计算圆周率 Pi (π)值, 精确到小数点后 10000 位
只需要 30 多句代码!
Victor Chen,
大家都知道π=3.1415926……无穷多位, 历史上很多人都在计算这个数, 一直认为是一个非常复杂的问题。现在有了电脑,
这个问题就简单了。
电脑可以利用级数计算出很多高精度的值, 有关级数的问题请参考《高等数学》,以下是比较有名的有关π的级数:
其中有些计算起来很复杂, 我们可以选用第三个, 比较简单, 并且收敛的非常快。
因为计算π值, 而这个公式是计算π/2的, 我们把它变形:
π = 2 + 2/3 + 2/3*2/5 + 2/3*2/5*3/7 + ...
对于级数, 我们先做个简单测试, 暂时不要求精度:
用 C++ Builder 新建一个工程, 在 Form 上放一个 Memo1 和 一个 Button1, 在 Button1
的 OnClick 事件写:
void __fastcall TForm1::Button1Click(TObject
{ & double x=2, z=2; & int a=1, b=3; &
while(z&1e-15) & { &&& z = z*a/b;
&&& x += &&& a++; &&&
b+=2; & } & Memo1-&Text = AnsiString().sprintf(&Pi=%.13f&,
按Button1在Memo1显示出执行结果:
这个程序太简单了, 而且 double 的精度很低,
只能计算到小数点后 10 几位。
把上面的程序改造一下, 让它精确到小数点后面 1000 位再测试一下:
在 Form 上再放一个按钮 Button2, 在这个按钮的 OnClick 事件写:
void __fastcall TForm1::Button2Click(TObject
{ & const ARRSIZE=1010, DISPCNT=1000; //定义数组大小,显示位数
& char x[ARRSIZE], z[ARRSIZE]; //x[0] x[1] . x[2] x[3]
x[4] .... x[ARRSIZE-1] & int a=1, b=3, c, d, Run=1,
& memset(x,0,ARRSIZE); & memset(z,0,ARRSIZE);
& x[1] = 2; & z[1] = 2;
& while(Run
&& (++Cnt&)) & { &&&
//z*=a; &&& d = 0; &&&
for(int i=ARRSIZE-1; i&0; i--) &&& {
&&&&& c = z[i]*a + &&&&&
z[i] = c % 10; &&&&& d = c / 10;
&&& } &&& //z/=b; &&&
d = 0; &&& for(int i=0; i&ARRSIZE; i++)
&&& { &&&&& c =
z[i]+d*10; &&&&& z[i] = c /
&&&&& d = c % &&&
} &&& //x+=z; &&& Run
= 0; &&& for(int i=ARRSIZE-1; i&0; i--)
&&& { &&&&& c =
x[i] + z[i]; &&&&& x[i] = c%10;
&&&&& x[i-1] += c/10; &&&&&
Run |= z[i]; &&& } &&&
a++; &&& b+=2; & } & Memo1-&Text
= AnsiString().sprintf(&计算了 %d 次\r\n&,Cnt); &
Memo1-&Text = Memo1-&Text + AnsiString().sprintf(&Pi=%d%d.\r\n&,
x[0],x[1]); & for(int i=0; i&DISPCNT; i++) &
{ &&& if(i && ((i%100)==0)) &&&
Memo1-&Text = Memo1-&Text + &\r\n&; &&&
Memo1-&Text = Memo1-&Text + (int)x[i+2]; & }
按 Button2 执行结果:
这下心理有底了, 是不是改变数组大小就可以计算更多位数呢?答案是肯定的。
如果把定义数组大小和显示位数改为:
const ARRSIZE=10100, DISPCNT=10000; //定义数组大小,显示位数
执行结果精度可达 10000 位:
... 限于篇幅, 这里就省略了, 还是留给你自己来算吧!
提高精度的原理:
以上程序的原理是利用数组把计算结果保存起来, 其中数组每一项保存10进制数的一位,
小数点定位在数组第1个数和第二个数之间, 即小数点前面2位整数, 其余都是小数位。
利用电脑模拟四则运算的笔算方法来实现高精度的数据计算,没想到最原始的方法竟然是精度最高的。
编程爱好者 -- Victor Chen 的个人主页
本站永久域名:
本站可以互相交换相关内容网站的链接
本站控件技术支持请到留言
本站拒绝任何毫无相关的广告和链接圆周率到底有多少位啊_百度知道
圆周率到底有多少位啊
提问者采纳
12,并提供基于Fabrice Bellard公式的验算功能。他们于2009年算出π值2。【PC机上的计算】
1,当时的精度是小数点后的42000位、个人计算圆周率的世界纪录
在一个现场解说验证活动中,一名59岁日本老人Akira Haraguchi将圆周率π算到了小数点后的83431位,000位小数的世界纪录【圆周率的最新计算纪录】
1,这名孜孜不倦的59岁老人向观众讲解了长达13个小时。这一纪录已经被收入了Guinness世界大全中,000.3
机器配置,980、新世界纪录
圆周率的最新计算纪录由日本筑波大学所创造,此前的纪录是由一名日本学生于1995年计算出的,884,还可以计算e和sqrt(2),最终获得认同:Pentium III 1G、PC机上的最高计算记录
最高记录。据报道。
2.333333天)
验算时间:Shigeru Kondo
所用程序,这一结果打破了由日本人金田康正的队伍于2002年创造的1,372位
时间,FastTrak66)
计算时间,576,901。PiFast可以利用磁盘缓存,100:日
记录创造者,WindowsNT4,突破物理内存的限制进行超高精度的计算,884,375秒 (21。
2.0,000 位小数。它除了计算圆周率,最高计算位数可达240亿位,370, 1792M RAM、PiFast
目前PC机上流行的最快的圆周率计算程序是PiFast:1,241,40GBx2(IDE:PiFast ver3
提问者评价
谢谢你的细致解答,我的问题已经解决了,多谢你的热心帮助^_^!
来自团队:
其他类似问题
为您推荐:
圆周率的相关知识
其他2条回答
无限不循环小数
是无理数。
呵呵,本人第一次使用此软件,问了个好蠢的问题
求采纳。。
圆周率是无限不循环小数,所以位数无穷。
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁在做工程预决算时,圆周率应用3.14还是用 π,或者省略到第几位?
端木哚哚_143
3.14,精确到KG即可,电脑算的话精度高点。
为您推荐:
扫描下载二维码多种解法计算圆周率π_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
多种解法计算圆周率π
上传于||文档简介
&&吉​林​大​学​珠​海​学​院​C​语​言​课​程​设​计
阅读已结束,如果下载本文需要使用3下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩7页未读,继续阅读
你可能喜欢

我要回帖

更多关于 圆周率前1000位 的文章

 

随机推荐