最近学习了蒙特卡洛求π的算法,自己实现了串行与并行算法。
(1)串行算法
算法思想:产生2n个随机数据,范围[0,1],对每个数据点计算其坐标是否满足,统计满足此关系的点的数量count,则 π=count/4n。
代码:
#include<stdio.h>
#include<math.h>
#include<time.h>
#include<stdlib.h>
#define n 1000000000
void main()
{
int i,count=0;
double x,y,pi;
srand((int)time(NULL));
for(i=0;i<n;i++)
{
x=(double)(1.0*rand()/RAND_MAX); //产生0-1的随机数
y=(double)(1.0*rand()/RAND_MAX);
if(pow(x,2)+pow(y,2)<=1)
{
count+=1;
}
}
pi=4.0*count/n;
printf("%f",pi);
}
(2)并行算法
算法思想: