日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

c语言计算pi后1000位,计算圆周率 Pi (π)值, 精确到小数点后 10000 位

發(fā)布時(shí)間:2025/4/16 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言计算pi后1000位,计算圆周率 Pi (π)值, 精确到小数点后 10000 位 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

大家都知道π=3.1415926……無(wú)窮多位, 歷史上很多人都在計(jì)算這個(gè)數(shù), 一直認(rèn)為是一個(gè)非常復(fù)雜的問(wèn)題。現(xiàn)在有了電腦, 這個(gè)問(wèn)題就簡(jiǎn)單了。

電腦可以利用級(jí)數(shù)計(jì)算出很多高精度的值, 有關(guān)級(jí)數(shù)的問(wèn)題請(qǐng)參考《高等數(shù)學(xué)》,以下是比較有名的有關(guān)π的級(jí)數(shù):

其中有些計(jì)算起來(lái)很復(fù)雜, 我們可以選用第三個(gè), 比較簡(jiǎn)單, 并且收斂的非常快。

因?yàn)橛?jì)算π值, 而這個(gè)公式是計(jì)算π/2的, 我們把它變形:

π = 2 + 2/3 + 2/3*2/5 + 2/3*2/5*3/7 + …

對(duì)于級(jí)數(shù), 我們先做個(gè)簡(jiǎn)單測(cè)試, 暫時(shí)不要求精度:

用 C++ Builder 新建一個(gè)工程, 在 Form 上放一個(gè) Memo1 和 一個(gè) 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顯示出執(zhí)行結(jié)果:

Pi=3.1415926535898

這個(gè)程序太簡(jiǎn)單了, 而且 double 的精度很低, 只能計(jì)算到小數(shù)點(diǎn)后 10 幾位。

把上面的程序改造一下, 讓它精確到小數(shù)點(diǎn)后面 1000 位再測(cè)試一下:

在 Form 上再放一個(gè)按鈕 Button2, 在這個(gè)按鈕的 OnClick 事件寫:

void __fastcall TForm1::Button2Click(TObject *Sender)

{

const ARRSIZE=1010, DISPCNT=1000; //定義數(shù)組大小,顯示位數(shù)

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*a + d;

z = c % 10;

d = c / 10;

}

//z/=b;

d = 0;

for(int i=0; i

{

c = z+d*10;

z = c / b;

d = c % b;

}

//x+=z;

Run = 0;

for(int i=ARRSIZE-1; i>0; i–)

{

c = x + z;

x = c%10;

x[i-1] += c/10;

Run |= z;

}

a++;

b+=2;

}

Memo1->Text = AnsiString().sprintf(“計(jì)算了 %d 次\r\n”,Cnt);

Memo1->Text = Memo1->Text + AnsiString().sprintf(“Pi=%d%d.\r\n”, x[0],x[1]);

for(int i=0; i

{

if(i && ((i%100)==0))

Memo1->Text = Memo1->Text + “\r\n”;

Memo1->Text = Memo1->Text + (int)x[i+2];

}

}

按 Button2 執(zhí)行結(jié)果:

Pi=03.

141592653589793238462643383279502884197169399375105820974944 5923078164062862089986280348253421170679

821480865132823066470938446095505822317253594081284811174502 8410270193852110555964462294895493038196

442881097566593344612847564823378678316527120190914564856692 3460348610454326648213393607260249141273

724587006606315588174881520920962829254091715364367892590360 0113305305488204665213841469519415116094

330572703657595919530921861173819326117931051185480744623799 6274956735188575272489122793818301194912

983367336244065664308602139494639522473719070217986094370277 0539217176293176752384674818467669405132

000568127145263560827785771342757789609173637178721468440901 2249534301465495853710507922796892589235

420199561121290219608640344181598136297747713099605187072113 4999999837297804995105973173281609631859

502445945534690830264252230825334468503526193118817101000313 7838752886587533208381420617177669147303

598253490428755468731159562863882353787593751957781857780532 1712268066130019278766111959092164201989

這下心理有底了, 是不是改變數(shù)組大小就可以計(jì)算更多位數(shù)呢?答案是肯定的。

如果把定義數(shù)組大小和顯示位數(shù)改為:

const ARRSIZE=10100, DISPCNT=10000; //定義數(shù)組大小,顯示位數(shù)

執(zhí)行結(jié)果精度可達(dá) 10000 位:

Pi=03.

141592653589793238462643383279502884197169399375105820974944 5923078164062862089986280348253421170679

821480865132823066470938446095505822317253594081284811174502 8410270193852110555964462294895493038196

442881097566593344612847564823378678316527120190914564856692 3460348610454326648213393607260249141273

724587006606315588174881520920962829254091715364367892590360 0113305305488204665213841469519415116094

330572703657595919530921861173819326117931051185480744623799 6274956735188575272489122793818301194912

983367336244065664308602139494639522473719070217986094370277 0539217176293176752384674818467669405132

000568127145263560827785771342757789609173637178721468440901 2249534301465495853710507922796892589235

420199561121290219608640344181598136297747713099605187072113 4999999837297804995105973173281609631859

502445945534690830264252230825334468503526193118817101000313 7838752886587533208381420617177669147303

598253490428755468731159562863882353787593751957781857780532 1712268066130019278766111959092164201989

380952572010654858632788659361533818279682303019520353018529 6899577362259941389124972177528347913151

… 限于篇幅, 這里就省略了, 還是留給你自己來(lái)算吧!

502014102067235850200724522563265134105592401902742162484391 4035998953539459094407046912091409387001

264560016237428802109276457931065792295524988727584610126483 6999892256959688159205600101655256375678

提高精度的原理:

以上程序的原理是利用數(shù)組把計(jì)算結(jié)果保存起來(lái), 其中數(shù)組每一項(xiàng)保存10進(jìn)制數(shù)的一位,

小數(shù)點(diǎn)定位在數(shù)組第1個(gè)數(shù)和第二個(gè)數(shù)之間, 即小數(shù)點(diǎn)前面2位整數(shù), 其余都是小數(shù)位。

利用電腦模擬四則運(yùn)算的筆算方法來(lái)實(shí)現(xiàn)高精度的數(shù)據(jù)計(jì)算,沒(méi)想到最原始的方法竟然是精度最高的。

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的c语言计算pi后1000位,计算圆周率 Pi (π)值, 精确到小数点后 10000 位的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。