#include #include #include #include using namespace std; void Greeting(); int main() { int numberOfThreads = 8; vector hitArray(numberOfThreads,0); int size{200'000'000}; #pragma omp parallel num_threads(numberOfThreads) { int id{omp_get_thread_num()}; long int hits = 0; double x, y; unsigned int seed = time(nullptr) * id; #pragma omp for for(int i = 0; i < size; ++i) { x = rand_r(&seed) / static_cast( RAND_MAX); y = rand_r(&seed) / static_cast( RAND_MAX); if ((x*x +y*y ) <= 1 ) { ++hits; } } hitArray[id] = hits; } cout << fixed << setprecision(10); long double pi = 0; for (int i = 0; i < numberOfThreads; ++i) { pi += hitArray[i]; } cout << 4.0 * pi / static_cast(size) << endl; return 0; }