圓周率的幾種C語言編程代碼_第1頁
圓周率的幾種C語言編程代碼_第2頁
圓周率的幾種C語言編程代碼_第3頁
圓周率的幾種C語言編程代碼_第4頁
圓周率的幾種C語言編程代碼_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

計(jì)算n的方法一、蒙特卡羅法(MonteCarlo)蒙特卡洛方法是一種以概率統(tǒng)計(jì)理論為指導(dǎo)的一類非常重要的數(shù)值計(jì)算方法。蒙特卡羅是摩納

哥公國的一座城市(賭城)。Buffon投針就是蒙特卡洛方法的思想,但是Buffon是蒙特卡洛方法的

起源。蒙特卡洛方法同樣可以通過隨機(jī)通過產(chǎn)生隨機(jī)數(shù)的方式來解決計(jì)算問題。比如估算和計(jì)算不

規(guī)則圖形的面積。圖1蒙特卡羅方法模擬這種方法是一種利用計(jì)算機(jī)隨機(jī)數(shù)的功能基于“隨機(jī)數(shù)”的算法,通過計(jì)算落在單位圓內(nèi)的點(diǎn)與落在正方形內(nèi)的點(diǎn)的比值求PI。圖2蒙特卡羅方法由于圖形的對稱性,我們靠考慮該圖的四分之一部分。假定一點(diǎn)能夠均勻地扔到一個正方形中,計(jì)算落入其中的點(diǎn)個數(shù)。通過計(jì)數(shù)其中落入內(nèi)切圓的點(diǎn)的個數(shù);

如果一共投入N個點(diǎn),其中有M個落入圓中,則只要點(diǎn)均勻,假定圓周的半徑為R,則:J卑即2JN(2R)2' N式(1)該方法得到的要得到n的精度與投入點(diǎn)的個數(shù)有關(guān),一般個數(shù)較大時精度比較高。doublerandpi(intn){intnumInCircle=O;doublex,y;doublepi;for(inti=0;i〈n;i++){x=rand()*1.0/RAND_MAX;y=rand()*1.0/RANDMAX;if(x*x+y*y〈1)numInCircle++;i=(4.0*numlnCircle)/n;returnpi;圖3蒙特卡羅示例代碼寫出來你的代碼實(shí)際測試結(jié)果(lOMarks)表1蒙特卡羅方法實(shí)際測試結(jié)果

由數(shù)學(xué)公式:?式(2)當(dāng)n取1000時就很接近圖4級數(shù)方法示例代碼寫出來你的代碼實(shí)際測試結(jié)果(lOMarks)表2級數(shù)方法實(shí)際測試結(jié)果次數(shù)10102103104105106107108109計(jì)算值運(yùn)行時間(ms)誤差三、劃分網(wǎng)格計(jì)算n圖5蒙特卡羅示例代碼將圖片分為n*n個小方形,統(tǒng)計(jì)落在圓內(nèi)的個數(shù)占所有方形的比例。圖6網(wǎng)格劃分示例代碼寫出來你的代碼實(shí)際測試結(jié)果(lOMarks)表3網(wǎng)格劃分方法實(shí)際測試結(jié)果次數(shù)10102103104105106107108109計(jì)算值運(yùn)行時間(ms)誤差A(yù)ppendix時間統(tǒng)計(jì)

方法一:clock統(tǒng)計(jì)

在待測試程序的開始部分和結(jié)束部分分別加入clock統(tǒng)計(jì),兩個之間的差值就是該部分代碼運(yùn)

行時間。需要注意的是Windows下和Linux下頭文件不一樣。clockt st//getcurrentclockcountstart=clock();//Insertyourcodehere■-■< ;//getcurrentclockcountend=clock();printf( ,end—start);方法二:系統(tǒng)API精確統(tǒng)計(jì)時間Windows和Linux下均有精確計(jì)時方法。在Windows下可以用系統(tǒng)提供的API函數(shù)?QueryPerformanceFrequency和?QueryPerformanceCounter?來進(jìn)行高精度的計(jì)時,現(xiàn)在的機(jī)器基本上都提供這種高精度的計(jì)時啦,所以不用擔(dān)心。利用該函數(shù)可以精確的計(jì)時到微妙級別。QueryPerformanceFrequency()可以得到CPU的時鐘頻率。QueryPerformanceCounter()可以通過兩次的差值來得到CPU的時鐘周期差值。這樣就可以計(jì)算出兩次差值之間所花費(fèi)的時間,當(dāng)然這里計(jì)算出來的時間是秒,一般都換算為毫秒或者微秒來表示。Windows#ifdefWIN32]num;start,end,freq,timel,time2;1#endif1//開始計(jì)時#ifdefWIN32QueryPerformanceFrequency(&num);freq=num.QuadPart;QueryPerformanceCounter(&num);tart=num.QuadPart;#endif//插入待測時間代碼//Sleep(1000);//結(jié)束計(jì)時時間#ifdefWIN32QueryPerformanceCounter(&num);end=num.QuadPart;time1=(end-start)*1000/freq;printf( ,(end—start)*1000/freq);#endif?gettimeofday精確到微秒級別?計(jì)時函數(shù)intgettimeofday(structtimeval*tv,structtimezone*tz);說明:gettimeofday將時間保存在結(jié)構(gòu)tv之中,

struttimevalgivesthenumberofsecondsandmicrosecondssincetheEpoch,

(00:00:00UTC,January1,1970),measuredinmicroseconds.??tz(即timezone,很少用至【」)一般我們

使用null來代替。保存時間的結(jié)構(gòu)體struttimeval{longtv_sec;longtv_usec;};注:需要頭文件#“cludevsys/time.h>__structtimevalta,tb;^^^^^^^^^^^^^Hdoyblemseca,msecb;//開始計(jì)時_^^ettimeofday(&ta^NULL);^^^^^^^^^Hmseca=ta.tvsec*1000000.0+ta.tvusec;|//插入運(yùn)行代碼/Insertyourcodehere^^^^^^^^^^

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論