积分法计算pi值
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Pi值计算(积分法)
程序清单:
#include
#include
#include
static long num_step;
const int Threadnum=10;
double step,pi=0,sum=0.0;
CRITICAL_SECTION g;
DWORD WINAPI threadFunc(LPVOID pParam)
{
int num=*((int *)pParam);
double x,sum1=0;
step=1.0/(double)num_step;
for(int i=num;i { x=(i+0.5)*step; sum1+=4.0/(1.0+x*x); } EnterCriticalSection(&g); sum+=sum1; LeaveCriticalSection(&g); return 0; } void main() { cout<<"输入分的块数:"; cin>>num_step; LARGE_INTEGER temp; double dFreq; //系统时钟 QueryPerformanceFrequency(&temp); dFreq=(double)temp.QuadPart;// 获得计数器的时钟频率LONGLONG Start,End; QueryPerformanceCounter(&temp); Start=temp.QuadPart;// 获得初始计数器数值 HANDLE hthread[Threadnum]; InitializeCriticalSection(&g); for(int i=0;i { hthread[i]=CreateThread(NULL, 0, threadFunc, &i, 0, NULL); } WaitForMultipleObjects(Threadnum,hthread,TRUE,INFINITE); DeleteCriticalSection(&g); pi=step*sum; QueryPerformanceCounter(&temp); End=temp.QuadPart;// 获得结束时计数器数值 //将计数器值换算成时间,以毫秒为单位,精确到微秒 double time=(double)((End-Start)*1000/dFreq); cout<<"线程数:"< cout<<"pi值:"< cout<<"时间:"<