#include <mpi.h>
#include <math.h> // Add this line
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
int myid, numprocs, i;
unsigned long n;
long double PI = 3.14159265358979323846264338327950288419716939937510;
long double pi, sum, partial_sum, x;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &myid);
if (myid == 0) {
if (argc != 2) {
printf("Usage: %s <num_terms>\n", argv
[0]); MPI_Abort(MPI_COMM_WORLD, 1);
}
}
MPI_Bcast(&n, 1, MPI_UNSIGNED_LONG, 0, MPI_COMM_WORLD);
partial_sum = 0.0;
for(i = n / numprocs * myid + 1; i <= n / numprocs * (myid + 1); i++) {
x = ((long double)i - 0.5) / n;
partial_sum += 4.0 / (1.0 + x * x);
}
MPI_Reduce(&partial_sum, &sum, 1, MPI_LONG_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);
if (myid == 0) {
pi = sum / n;
printf("pi is approximately %.22Lf, Error is %.22Lf\n", pi
, fabsl
(pi
- PI
)); }
MPI_Finalize();
return 0;
}
I2luY2x1ZGUgPG1waS5oPgojaW5jbHVkZSA8bWF0aC5oPiAvLyBBZGQgdGhpcyBsaW5lCiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CiAgICBpbnQgbXlpZCwgbnVtcHJvY3MsIGk7CiAgICB1bnNpZ25lZCBsb25nIG47CiAgICBsb25nIGRvdWJsZSBQSSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NTAyODg0MTk3MTY5Mzk5Mzc1MTA7CiAgICBsb25nIGRvdWJsZSBwaSwgc3VtLCBwYXJ0aWFsX3N1bSwgeDsKCiAgICBNUElfSW5pdCgmYXJnYywgJmFyZ3YpOwogICAgTVBJX0NvbW1fc2l6ZShNUElfQ09NTV9XT1JMRCwgJm51bXByb2NzKTsKICAgIE1QSV9Db21tX3JhbmsoTVBJX0NPTU1fV09STEQsICZteWlkKTsKCiAgICBpZiAobXlpZCA9PSAwKSB7CiAgICAgICAgaWYgKGFyZ2MgIT0gMikgewogICAgICAgICAgICBwcmludGYoIlVzYWdlOiAlcyA8bnVtX3Rlcm1zPlxuIiwgYXJndlswXSk7CiAgICAgICAgICAgIE1QSV9BYm9ydChNUElfQ09NTV9XT1JMRCwgMSk7CiAgICAgICAgfQogICAgICAgIG4gPSBzdHJ0b3VsKGFyZ3ZbMV0sIE5VTEwsIDEwKTsKICAgIH0KCiAgICBNUElfQmNhc3QoJm4sIDEsIE1QSV9VTlNJR05FRF9MT05HLCAwLCBNUElfQ09NTV9XT1JMRCk7CgogICAgcGFydGlhbF9zdW0gPSAwLjA7CiAgICBmb3IoaSA9IG4gLyBudW1wcm9jcyAqIG15aWQgKyAxOyBpIDw9IG4gLyBudW1wcm9jcyAqIChteWlkICsgMSk7IGkrKykgewogICAgICAgIHggPSAoKGxvbmcgZG91YmxlKWkgLSAwLjUpIC8gbjsKICAgICAgICBwYXJ0aWFsX3N1bSArPSA0LjAgLyAoMS4wICsgeCAqIHgpOwogICAgfQoKICAgIE1QSV9SZWR1Y2UoJnBhcnRpYWxfc3VtLCAmc3VtLCAxLCBNUElfTE9OR19ET1VCTEUsIE1QSV9TVU0sIDAsIE1QSV9DT01NX1dPUkxEKTsKCiAgICBpZiAobXlpZCA9PSAwKSB7CiAgICAgICAgcGkgPSBzdW0gLyBuOwogICAgICAgIHByaW50ZigicGkgaXMgYXBwcm94aW1hdGVseSAlLjIyTGYsIEVycm9yIGlzICUuMjJMZlxuIiwgcGksIGZhYnNsKHBpIC0gUEkpKTsKICAgIH0KCiAgICBNUElfRmluYWxpemUoKTsKICAgIHJldHVybiAwOwp9Cg==