计算圆周率值,精确到小数点后一万位 大家都知道π=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 *Sender) { double x=2, z=2; int a=1, b=3; while(z>1e-15) { z = z*a/b; x += z; a++; b+=2; } Memo1->Text = AnsiString().sprintf("Pi=%.13f", x); } 按Button1在Memo1显示出执行结果: Pi=3.1415926535898 -------------------------------------------------------------------------------- 这个程序太简单了, 而且 double 的精度很低, 只能计算到小数点后 10 几位。 把上面的程序改造一下, 让它精确到小数点后面 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< 200000000)) { //z*=a; d = 0; for(int i=ARRSIZE-1; i>0; i--) { c = z[i]*a + d; 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 / b; d = c % b; } //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. 1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679 8214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196 4428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273 7245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094 3305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912 9833673362440656643086021394946395224737190702179860943702770539217176293176752384674818467669405132 0005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235 4201995611212902196086403441815981362977477130996051870721134999999837297804995105973173281609631859 5024459455346908302642522308253344685035261931188171010003137838752886587533208381420617177669147303 5982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989 -------------------------------------------------------------------------------- 这下心理有底了, 是不是改变数组大小就可以计算更多位数呢?答案是肯定的。如果把定义数组大小和显示位数改为: const ARRSIZE=10100, DISPCNT=10000; //定义数组大小,显示位数 执行结果精度可达 10000 位: Pi=03. 1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679 8214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196 4428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273 7245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094 3305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912 9833673362440656643086021394946395224737190702179860943702770539217176293176752384674818467669405132 0005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235 4201995611212902196086403441815981362977477130996051870721134999999837297804995105973173281609631859 5024459455346908302642522308253344685035261931188171010003137838752886587533208381420617177669147303 5982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989 3809525720106548586327886593615338182796823030195203530185296899577362259941389124972177528347913151 ... 限于篇幅, 这里就省略了, 还是留给你自己来算吧! 5020141020672358502007245225632651341055924019027421624843914035998953539459094407046912091409387001 2645600162374288021092764579310657922955249887275846101264836999892256959688159205600101655256375678 -------------------------------------------------------------------------------- 提高精度的原理: 以上程序的原理是利用数组把计算结果保存起来, 其中数组每一项保存10进制数的一位,小数点定位在数组第1个数和第二个数之间, 即小数点前面2位整数, 其余都是小数位。 利用电脑模拟四则运算的笔算方法来实现高精度的数据计算,没想到最原始的方法竟然是精度最高的。
温馨提示:内容为网友见解,仅供参考
请写圆周率,位数越多越好
π=3.1415926535 8979323846 2643383279 5028841971 6939937510 : 1 5820974944 5923078164 0628620899 8628034825 3421170679 : 2 8214808651 3282306647 0938446095 5058223172 5359408128 : 3 4811174502 8410270193 8521105559 6446229489 5493038196 : 4 4428810975 6659334461 2847564823 3786783165 2712019091 : 5 456485...
谁知道圆周率是多少?(小数点后位数越多越好)
圆周率π的前1195位小数 3.141 5926 5358 9793 2384 6264 3383 2795 0238 4197 1693 9937 5105 8209 7494 4592 3078 1640 6286 2089 9862 8034 8753 4211 7067 9321 4808 6513 2823 0664 7093 8446 0955 0582 2317 2535 9408 1284 8113 7450 2841 0270 1938 5211 0595 9644 6229 4895 4930 381...
请问圆周率(完整版)
圆周率500位 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944 59230 78164 06286 20899 86280 34825 34211 70679 82148 08651 32823 06647 09384 46095 50582 23172 53594 08128 48111 74502 84102 70193 85211 05559 64462 29489 54930 38196 44288 10975 66593 34461 28475 ...
圆周率,越多越好!
圆周率500位 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944 59230 78164 06286 20899 86280 34825 34211 70679 82148 08651 32823 06647 09384 46095 50582 23172 53594 08128 48111 74502 84102 70193 85211 05559 64462 29489 54930 38196 44288 10975 66593 34461 28475 ...
圆周律,小数点后的位数越多越好!
圆周率小数点后600位 π=3.1415926535 8979323846 2643383279 5028841971 6939937510 5820974944 5923078164 0628620899 8628034825 3421170679 8214808651 3282306647 0938446095 5058223172 5359408128 4811174502 8410270193 8521105559 6446229489 5493038196 4428810975 6659334461 2847564823 3786783165 2712019091 4564856692 ...
谁能帮我精确下π多少。位数越多越好。现在已经到75位
圆周率小数点后1000位 3.14159265358979323846264338327950288419716939937510582097494459230781640 6286208998628034825342117067982148086513282306647093844609550582231725359 4081284811174502841027019385211055596446229489549303819644288109756659334 4612847564823378678316527120190914564856692346034861045432664821339360726 ...
谁能告诉我圆周率后的100位数
4201995611 2129021960 8640344181 5981362977 4771309960 5187072113 4999999837 2978049951 0597317328 1609631859 5024459455 3469083026 4252230825 3344685035 2619311881 7101000313 7838752886 5875332083 8142061717 7669147303 5982534904 2875546873 1159562863 8823537875 9375195778 1857780532 1712268066 1300192787 6611195909 ...
最早发现圆周率的人并非祖冲之,为何认他是圆周率之父?
这个时期印度有一位数学家也曾经推算出过圆周率,但是比张衡要晚了500多年。然后是三国时期,魏国有一位叫刘徽的人用“割圆术”确定了圆周率的数值是3.14,取得了历史性的突破。到了南北朝时期,祖冲之居然把圆周率推算准确到了小数点的后7位,比国外数学家要早发现了九百多年。祖冲之是南...
圆周率(完整是多少?)
圆周率 Numerical Integrator And Computer)在阿伯丁试验场启用了。次年,里特韦斯纳、冯纽曼和梅卓普利斯利用这部电脑,计算出π的2037个小数位。这部电脑只用了70小时就完成了这项工作,扣除插入打孔卡所花的时间,等于平均两分钟算出一位数。五年后,IBM NORC(海军兵器研究计算机)只用了13分钟,就算出π的3089个小数位。科...
背圆圈率位数最多的人背到多少位
背诵圆周率最多的人:日本人原口证(于2006年10月3日至4日背诵圆周率小数后第100,000位数,总计背诵时间为16个小时半)一学生背圆周率至小数点后6万位 截至20日14时56分,西北农林科技大学硕士研究生吕超用24小时零4分钟,不间断无差错地背诵圆周率至小数点后67890位,从而刷新由一名日本学生于1995年...