文档介绍:多线程求pi实验报告 MonteCarlo方法计算Pi 一、实验要求以OpenMP实现MonteCarlo计算Pi的并行程序注意: ?制导循环编译?共享变量的处理?编译运行比较?修改测试点数,提高计算精度。?利用OpenMP实现积分法,比较。二、实验原理通过蒙特卡罗算法计算圆周率的主导思想是:统计学?,向这个正方形内随机的画点,则点落在圆内的概论为P=圆面积/正方形面积。?,在点处画一个半径为R=1的圆,以这个圆画一个外接正方形,其边长为R=1(R=1时,圆面积即Pi)。? #include#include#includeusingnamespacestd; int_tmain(intargc,_TCHAR*argv[]){ longmax=;longi,count=0; doublex,y,bulk,starttime,endtime;time_tt; cout>max; starttime=clock(); //产生以当前时间开始的随机种子srand((unsigned)time(&t));#pragmaompparallelfornum_threads(8)default(shared)private(x,y)reduction(+:count)for(i=0;i#include#include #includeusingnamespacestd; staticlongnum_steps=10;doublestep,pi; int_tmain(intargc,_TCHAR*argv[]){ inti; doublex,sum=; clock_tstart,finish; printf("请输入您要用几步来进行计算\n");cin>>num_steps; step=/(double)num_steps;start=clock(); #pragmaompparallelfornum_threads(8)default(shared)private(x)reduction(+:sum) for(i=0;i #include #include #include #include longnum_steps=10000;//每一块中的分得块数或者是每个进程中执行的步数 double*sum;//用来存储各个进程的计算结果 doublestep;//每一块的宽度大小 DWORDWINAPIfun(LPVOIDpArg)//进程中用来执行的函数{ inta1=*((int*)pArg); doublex; for(inti=a1*num_steps;i>parts; cout>num_steps; a=newint[parts]; handle=newHANDLE[parts]; sum=newdouble[parts]; step=/((double)num_steps*parts); for(i=0;i #include #include #include longnum_steps=10000;//每一块中的分得块数或者是每个进程中执行的步数 int*a;//用来存储从何处开始计算的标记 doublesum;//用来存储各个进程的计算结果 doublestep;//每一块的宽度大小