#include <stdio.h>
#include <omp.h>
int main() {
long num_steps = 1000000; // Number of intervals
double step = 1.0 / (double)num_steps;
double pi = 0.0;
#pragma omp parallel
{
double sum = 0.0;
int i;
#pragma omp for
for (i = 0; i < num_steps; i++) {
double x = (i + 0.5) * step;
sum += 4.0 / (1.0 + x * x);
}
// Use a critical section to update the global variable pi
#pragma omp critical
{
pi += sum * step;
}
}
printf("Calculated value of PI: %.15f\n", pi
); return 0;
}
ICNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8b21wLmg+CgppbnQgbWFpbigpIHsKICAgIGxvbmcgbnVtX3N0ZXBzID0gMTAwMDAwMDsgLy8gTnVtYmVyIG9mIGludGVydmFscwogICAgZG91YmxlIHN0ZXAgPSAxLjAgLyAoZG91YmxlKW51bV9zdGVwczsKICAgIGRvdWJsZSBwaSA9IDAuMDsKCiAgICAjcHJhZ21hIG9tcCBwYXJhbGxlbAogICAgewogICAgICAgIGRvdWJsZSBzdW0gPSAwLjA7CiAgICAgICAgaW50IGk7CiAgICAgICAgI3ByYWdtYSBvbXAgZm9yCiAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9zdGVwczsgaSsrKSB7CiAgICAgICAgICAgIGRvdWJsZSB4ID0gKGkgKyAwLjUpICogc3RlcDsKICAgICAgICAgICAgc3VtICs9IDQuMCAvICgxLjAgKyB4ICogeCk7CiAgICAgICAgfQoKICAgICAgICAvLyBVc2UgYSBjcml0aWNhbCBzZWN0aW9uIHRvIHVwZGF0ZSB0aGUgZ2xvYmFsIHZhcmlhYmxlIHBpCiAgICAgICAgI3ByYWdtYSBvbXAgY3JpdGljYWwKICAgICAgICB7CiAgICAgICAgICAgIHBpICs9IHN1bSAqIHN0ZXA7CiAgICAgICAgfQogICAgfQoKICAgIHByaW50ZigiQ2FsY3VsYXRlZCB2YWx1ZSBvZiBQSTogJS4xNWZcbiIsIHBpKTsKICAgIHJldHVybiAwOwp9