![多種解法計(jì)算圓周率π_第1頁](http://file4.renrendoc.com/view/4165398b2a7ab7e916b33ef1bdf20571/4165398b2a7ab7e916b33ef1bdf205711.gif)
![多種解法計(jì)算圓周率π_第2頁](http://file4.renrendoc.com/view/4165398b2a7ab7e916b33ef1bdf20571/4165398b2a7ab7e916b33ef1bdf205712.gif)
![多種解法計(jì)算圓周率π_第3頁](http://file4.renrendoc.com/view/4165398b2a7ab7e916b33ef1bdf20571/4165398b2a7ab7e916b33ef1bdf205713.gif)
![多種解法計(jì)算圓周率π_第4頁](http://file4.renrendoc.com/view/4165398b2a7ab7e916b33ef1bdf20571/4165398b2a7ab7e916b33ef1bdf205714.gif)
![多種解法計(jì)算圓周率π_第5頁](http://file4.renrendoc.com/view/4165398b2a7ab7e916b33ef1bdf20571/4165398b2a7ab7e916b33ef1bdf205715.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、課程設(shè)計(jì)報(bào)告學(xué)院、系:吉林大學(xué)珠海學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系專業(yè)名稱:軟件工程課程設(shè)計(jì)科目C語言程序課程設(shè)計(jì)所在班級:學(xué)生學(xué)號:學(xué)生姓名:指導(dǎo)教師:曾志平完成時(shí)間:2012年3月-5月題目:多種解法計(jì)算圓周率n一、設(shè)計(jì)任務(wù)與目標(biāo)此問題求圓周率在之前所學(xué)的c語言中已經(jīng)接觸過,但是算法單一,采用級數(shù), 而且收斂較慢,故運(yùn)行時(shí)間較長,此程序設(shè)計(jì)要解決的問題是如何實(shí)現(xiàn)高精度的 運(yùn)算,如何對結(jié)果進(jìn)行輸出,并且嘗試采用不同的方法進(jìn)行求解圓周率。本次上機(jī)實(shí)踐所使用的平臺和相關(guān)軟件。平臺:windows 7相關(guān)軟件:VC+6.0二、方案設(shè)計(jì)與論證隨機(jī)數(shù)法求圓周率可以利用計(jì)算機(jī)中隨機(jī)數(shù)函數(shù)模擬出兩個01之間的浮點(diǎn)型
2、 點(diǎn)(x,y),建立直角坐標(biāo)系思想,利用邊長為1的正方形內(nèi)切半徑為0.5圓的方 程(x-0.5)*(x-0.5) + (y-0.5)*(y-0.5)=0.25判斷點(diǎn)是否在圓內(nèi),用計(jì)數(shù)器b保 存在的點(diǎn),如此模擬5000次。用落入圓內(nèi)的點(diǎn)數(shù)b的4倍除以總的扔的點(diǎn)數(shù)N 用,可大概求出圓周率的值。一般來說,根據(jù)概率思想,N值越大,模擬次數(shù)越 多,其求出來圓周率的值越接近真實(shí)的圓周率。祖沖之迭代法因?yàn)閳A內(nèi)接正六邊形邊長等于半徑的思想,故可以從正六邊形出 發(fā),不斷迭代,當(dāng)正多邊形邊數(shù)增加時(shí),其周長也逐漸逼近圓的周長,反過來即 可求的一定精度的圓周率,設(shè)圓內(nèi)接正六邊形的邊長為b,邊數(shù)為i,利用公式 七=(也
3、20” )/2進(jìn)行迭代運(yùn)算,為了提高精度,算法中對公式進(jìn)行分開運(yùn) 算,求得邊數(shù)為2i的圓內(nèi)接正多邊形后得出其周長,運(yùn)用迭代后的正多邊形周 長減去迭代前的正多邊形周長,獲取其精度程度。如果最終求出的圓內(nèi)接正多邊 形的周長,即接近圓的周長,最后利用數(shù)學(xué)公式即可以求出圓周率。輸出其最后 迭代后得圓內(nèi)接正多邊形的邊數(shù)和圓周率即可。用級數(shù)法求圓周率,定義一個a400的數(shù)組用于存儲計(jì)算結(jié)果,從結(jié)果出發(fā), 因?yàn)槠湟敵鲆欢ň鹊膱A周率,若n值太大會造成計(jì)算冗余,利用數(shù)學(xué)中不等 式確定其n項(xiàng),用一個循環(huán)從n1計(jì)算每一項(xiàng)的值并存儲,1+n/(2n+1)用數(shù)組模 擬手工乘除加法,除法1/(2n+1),相除后商為a
4、0,然后將余數(shù)乘以10,作 為被除數(shù)再除以除數(shù)取商為十分位,存于a1,如此類推;乘法則每個數(shù)組乘以 n,如果滿十則向前面數(shù)組進(jìn)一,再取其個位存儲;加法因?yàn)榧?,則直接可以 加到a0上。然后保存計(jì)算結(jié)果后用該值計(jì)算n-1項(xiàng),如此重復(fù)一直到第1項(xiàng) 后按照格式輸出每個數(shù)組元素即可。附加題圓外切正多邊形與圓內(nèi)接正多邊形算法相似,但是圓半徑的長度為1時(shí), 其外切正六邊形的邊長為2*sqrt(3)/3,并且其迭代公式也相應(yīng)的進(jìn)行了改變, b=2*(sqrt(b*b+4)-2)/b;由于圓外切正多邊形迭代后的周長小于迭代前的周長, 故控制精度時(shí)用迭代前的正多邊形周長減去迭代后的正多邊形邊長。三、程序框圖或流
5、程圖,程序清單與調(diào)用關(guān)系nextl1由主函數(shù)分別調(diào)用void suiji()(即課程第一小問,隨機(jī)數(shù)函數(shù)),void neijie() (第二小問,內(nèi)接正多邊形法),void jishu()(第三小問,級數(shù)法),void waiqie()(外切正多邊形法).由于jishu函數(shù)的流程圖過長,造成排版不便,故進(jìn)行了分段和省略控制輸出等 部分流程圖。四、全部源程序清單#include #include #include #include#define N 5000 void main() void jishu();void neijie();void suiji();void waiqie();su
6、iji(); TOC o 1-5 h z printf(n);neijie();printf(n);jishu();printf(n);waiqie();printf(n);void suiji()double x,y;int a=0,b=0;srand(time(0);while(a+=N)/投 5000 次點(diǎn)x=(double)rand()/RAND_MAX;/產(chǎn)生 01 之間的浮點(diǎn)數(shù)y=(double)rand()/RAND_MAX;/產(chǎn)生 01 之間的浮點(diǎn)數(shù)if(x-0.5)*(x-0.5) + (y-0.5)*(y-0.5)=0.25)/判 斷所產(chǎn)生的點(diǎn)是否在圓內(nèi) b+;/匯總落在圓
7、內(nèi)的點(diǎn)數(shù)printf(用隨機(jī)數(shù)法求得丸=%lfn”,4.0*b/N);void neijie()double e,b=1,d; /b:為正多邊形邊長long int i; /i:正多邊形邊數(shù)for(i=6;i*=2) /正多邊形邊數(shù)加倍d=1.0-sqrt(1.0-b*b/4); /計(jì)算圓內(nèi)接正多邊形的邊長b=sqrt(b*b/4+d*d);if(2*i*b-i*e 1e-15) /2*i*b迭代后的周長,i*e原來的周長break; /精度達(dá)1e-15則停止計(jì)算e=b; 保存本次正多邊形的邊長作為下一次精度控制的依據(jù)printf(用圓內(nèi)接正多邊形計(jì)算n =%.15lfn 迭代后得正多邊形的邊
8、數(shù) 為:dn”,i*b,i);void waiqie()double e,b=2*sqrt(3)/3,d; /b:為正多邊形邊長long int i; /i:正多邊形邊數(shù)for(i=6;i*=2) /正多邊形邊數(shù)加倍e=b; /e:暫存邊數(shù)為加倍前的邊長d=sqrt(1.0+b*b/4)-1; /計(jì)算圓外切正多邊形的邊長b=2*(b*b/4-d*d)/b;if(i*e-2*i*b 1e-15)break; /精度達(dá)1e-15則停止計(jì)算e=b; 保存本次正多邊形的邊長作為下一次精度控制的依據(jù)printf(附加題:外切正多邊形計(jì)算n=%.15lfn迭代后得正多邊形的邊數(shù) 為:dn”,i*b,i);
9、void jishu()float s;int x,b,c,i,j,n,e,a400;for(s=0,n=1;n100) break;for(i=0;i=1;b-)c=2*b+1;/首先用除法計(jì)算1/2n+1的高精度商for(i=0;i=0;i-)/計(jì)算 n/(2n+1)的高精度值ai=ai*b+j;/數(shù)組模擬手工乘法,每個數(shù)組乘以nj=ai/10;/如果滴十則對前面數(shù)組進(jìn)1ai=ai%10;/而該數(shù)組取個位a0=a0+1;/計(jì)算 1+n/(2n+1)的高精度值x=a0;for(j=0,i=101;i=0;i-)ai=ai*2+j;j=ai/10;ai=ai%10;/因?yàn)楣阶筮呥€有個 1/2
10、,對結(jié)果整 體乘以二,模擬手工乘法printf (-用級數(shù)方法求得n=%d.,a0);/控制格式并輸出結(jié)果 for(e=0,i=1;i=100;i+)printf(%d,ai);e+;if(e%30=0)printf(n);printf(n);五、程序運(yùn)行結(jié)果測試與分析由輸出結(jié)果可以看出,隨機(jī)數(shù)法求得圓周率浮動較大,也許赴值設(shè)為5000還過于小造成 結(jié)果誤差大,然后把N值設(shè)為50000后繼續(xù)測試如下I 1 C:Wi nd o wsE;yEtem3 2D buge.exe用隧和券法而亍了1函函用值|接正多認(rèn)萬計(jì)算蕓一“姑甲耶9器司 遙代后得正予山犯區(qū)辿哉力1066296用瑟我方性 *得,1.,的
11、的心抑 WA麗冊4偵/1皿河料1嶼g 心 4咬卜切正形計(jì)算 7T =3.11592653589796 打薦正矛穌;曲曲藪為:1B0663296Press anu to continue.當(dāng)N值為50000時(shí),測試結(jié)果較為接近圓周率且比較數(shù)值浮動較小,其余小問測試結(jié)果基 本接近真實(shí)圓周率的值,基本完成程序設(shè)計(jì)目標(biāo)。六、結(jié)論與心得設(shè)計(jì)中遇到的問題及解決過程在設(shè)計(jì)過程中遇到第三小問需要保存100位圓周率的時(shí)候,和同學(xué)討論后才明白 結(jié)果可以用數(shù)組保存并輸出,附加小問時(shí)圓外切正多邊形時(shí)剛來采用的是d=sqrt(1.0+b*b/4)-1 ; b=2*(sqrt(b*b+4)-2)/b,后來發(fā)現(xiàn)誤差很大,改
12、用公式 b=2*(b*b/4-d*d)/b 才 能夠接近,思考后發(fā)現(xiàn)b=2*(b*b/4-d*d)/b (誤差較小)將d代入,得 b=2*(b*b/4-(sqrt(b*b/4+1)-1)*(sqrt(b*b/4+1)-1)/b;(就這樣寫誤差還是比 較小的,幾乎跟內(nèi)切法的精度一樣),再化簡得 b=2*(b*b/4-(b*b/4+1)-1+2*sqrt(b*b/4+1)/b;(這個時(shí)候誤差就大了,i 只有 49152),再化簡 b=2*(2*sqrt(b*b/4+1)-2)/b 即 b=2*(sqrt(b*b+4)-2)/b(誤差 依然比較大),所以斷定d*d為誤差所在。我的理解:無論如何,b,
13、d等這些值是 一定有偏差的,b=2*(b*b/4-d*d)/b=2*(b/2+d)*(b/2-d)/b,由于 d 進(jìn)行了開根處 理,誤差微乎其微,幾乎可以忽略不計(jì),即可以當(dāng)他們是常數(shù),這個式子的誤差 級別 y=ax+b(a,b 為常量),b=2*(sqrt(b*b+4)-2)/b 的誤差級別 y=a/x+b(a,b 為 常量),x在(0,1區(qū)間顯然后者的誤差比較大);調(diào)試程序的時(shí)候會遇到小錯誤,但經(jīng)過反復(fù)修改后程序能夠運(yùn)行。設(shè)計(jì)體會和收獲。此次程序設(shè)計(jì)明白了對數(shù)據(jù)類型及其精度的重要性,有些科學(xué)研究需要高精度的 數(shù)據(jù),同時(shí)明白通向解決問題的道路是多種多樣的,我們應(yīng)當(dāng)用不同方向和方法 去解決問題。在我們解決不了問題的時(shí)候,要嘗試著去分析問題回歸問題的最基 本。七、參考資料,百度百科(祖沖之迭代法)楊克昌編著,計(jì)算機(jī)程序設(shè)計(jì)典型例題精解,國防科技大學(xué)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年二年級數(shù)學(xué)教師工作總結(jié)模版(3篇)
- 2025年個人居間協(xié)議(4篇)
- 2025年中外貨物買賣合同標(biāo)準(zhǔn)樣本(2篇)
- 化妝品儲存運(yùn)輸服務(wù)合同
- 農(nóng)產(chǎn)品城鄉(xiāng)配送合同范本
- 醫(yī)療設(shè)備緊急運(yùn)輸合同
- 咨詢公司裝修居間協(xié)議范本
- 服裝物流配送標(biāo)準(zhǔn)合同樣本
- 醫(yī)院窗簾改造工程施工方案
- 萊州花紋藝術(shù)漆施工方案
- 訂婚協(xié)議書手寫模板攻略
- 準(zhǔn)備單元 雪地上的“足跡”(教學(xué)設(shè)計(jì))-2023-2024學(xué)年五年級下冊科學(xué)大象版
- NB-T32042-2018光伏發(fā)電工程建設(shè)監(jiān)理規(guī)范
- 中國電信入職流程
- 宇航用商業(yè)現(xiàn)貨(COTS)器件保證指南-編制說明
- 音樂學(xué)科閱讀方案
- 《立體倉庫鋼結(jié)構(gòu)貨架技術(shù)規(guī)范(征求意見稿)》
- 2024年貴州蔬菜集團(tuán)有限公司招聘筆試參考題庫附帶答案詳解
- 2024江蘇省四校聯(lián)考高三下學(xué)期開學(xué)考化學(xué)試題及答案
- 《玩手機(jī)的危害》課件
- 《社區(qū)康復(fù)》課件-第二章 社區(qū)康復(fù)的內(nèi)容
評論
0/150
提交評論