源代码:
#include <iostream>
#include <omp.h>
static constexpr long MAX_N = 1000000000;
double calc_pi(const long N);
int main()
{
std::cout.precision(20);
std::cout << calc_pi(MAX_N) << '\n';
return 0;
}
double calc_pi(const long N)
{
const double N1 = 1.0 / N;
double res = 0.0;
#pragma omp parallel reduction(+ : res)
{
double tmp = 0.0;
#pragma omp for
for (long i = 0; i < N; i++)
{
const double x = (i + 0.5) * N1;
tmp += 4.0 / (x * x + 1);
}
res += tmp;
}
return res / N;
}
编译命令:
g++ main.cpp -o main -fopenmp -O3