圆周率的几种C语言编程代码_第1页
圆周率的几种C语言编程代码_第2页
圆周率的几种C语言编程代码_第3页
圆周率的几种C语言编程代码_第4页
圆周率的几种C语言编程代码_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算n的方法一、蒙特卡罗法(MonteCarlo)蒙特卡洛方法是一种以概率统计理论为指导的一类非常重要的数值计算方法。蒙特卡罗是摩纳

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

起源。蒙特卡洛方法同样可以通过随机通过产生随机数的方式来解决计算问题。比如估算和计算不

规则图形的面积。图1蒙特卡罗方法模拟这种方法是一种利用计算机随机数的功能基于“随机数”的算法,通过计算落在单位圆内的点与落在正方形内的点的比值求PI。图2蒙特卡罗方法由于图形的对称性,我们靠考虑该图的四分之一部分。假定一点能够均匀地扔到一个正方形中,计算落入其中的点个数。通过计数其中落入内切圆的点的个数;

如果一共投入N个点,其中有M个落入圆中,则只要点均匀,假定圆周的半径为R,则:J卑即2JN(2R)2' N式(1)该方法得到的要得到n的精度与投入点的个数有关,一般个数较大时精度比较高。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蒙特卡罗示例代码写出来你的代码实际测试结果(lOMarks)表1蒙特卡罗方法实际测试结果

由数学公式:?式(2)当n取1000时就很接近图4级数方法示例代码写出来你的代码实际测试结果(lOMarks)表2级数方法实际测试结果次数10102103104105106107108109计算值运行时间(ms)误差三、划分网格计算n图5蒙特卡罗示例代码将图片分为n*n个小方形,统计落在圆内的个数占所有方形的比例。图6网格划分示例代码写出来你的代码实际测试结果(lOMarks)表3网格划分方法实际测试结果次数10102103104105106107108109计算值运行时间(ms)误差Appendix时间统计

方法一:clock统计

在待测试程序的开始部分和结束部分分别加入clock统计,两个之间的差值就是该部分代码运

行时间。需要注意的是Windows下和Linux下头文件不一样。clockt st//getcurrentclockcountstart=clock();//Insertyourcodehere■-■< ;//getcurrentclockcountend=clock();printf( ,end—start);方法二:系统API精确统计时间Windows和Linux下均有精确计时方法。在Windows下可以用系统提供的API函数?QueryPerformanceFrequency和?QueryPerformanceCounter?来进行高精度的计时,现在的机器基本上都提供这种高精度的计时啦,所以不用担心。利用该函数可以精确的计时到微妙级别。QueryPerformanceFrequency()可以得到CPU的时钟频率。QueryPerformanceCounter()可以通过两次的差值来得到CPU的时钟周期差值。这样就可以计算出两次差值之间所花费的时间,当然这里计算出来的时间是秒,一般都换算为毫秒或者微秒来表示。Windows#ifdefWIN32]num;start,end,freq,timel,time2;1#endif1//开始计时#ifdefWIN32QueryPerformanceFrequency(&num);freq=num.QuadPart;QueryPerformanceCounter(&num);tart=num.QuadPart;#endif//插入待测时间代码//Sleep(1000);//结束计时时间#ifdefWIN32QueryPerformanceCounter(&num);end=num.QuadPart;time1=(end-start)*1000/freq;printf( ,(end—start)*1000/freq);#endif?gettimeofday精确到微秒级别?计时函数intgettimeofday(structtimeval*tv,structtimezone*tz);说明:gettimeofday将时间保存在结构tv之中,

struttimevalgivesthenumberofsecondsandmicrosecondssincetheEpoch,

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

使用null来代替。保存时间的结构体struttimeval{longtv_sec;longtv_usec;};注:需要头文件#“cludevsys/time.h>__structtimevalta,tb;^^^^^^^^^^^^^Hdoyblemseca,msecb;//开始计时_^^ettimeofday(&ta^NULL);^^^^^^^^^Hmseca=ta.tvsec*1000000.0+ta.tvusec;|//插入运行代码/Insertyourcodehere^^^^^^^^^^

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论