#include "mpi.h"
#include <iostream>
#include <cmath>
using namespace std;
int main(int argc,char* argv[])
{
double local = 0,pi;
int rank,size;
const int N = 100000;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);
//通过rank和size参数的使用使每个进程只计算一部分值 *** i+=size设置巧妙
for(int i=rank;i<N;i+=size)
{
local += 4.0/(1.0 + ((i + 0.5)/N) * ((i + 0.5)/N));
}
MPI_Reduce(&local,&pi,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD);
if(rank == 0)
{
cout << "pi is " << pi * (1.0 / N) << endl;
}
MPI_Finalize();
return 0;
}