#include #include #include #include #include using namespace std; const int THREAD_COUNT{10}; const int COUNT_LIMIT{200'000'000}; const int KILL_LOOP{1}; void ThreadFunction (int id, double & sum, const int nThread){ int i; float signTerm = 1; for(int j =0; j < KILL_LOOP; ++j) { sum = 0; for(i = id * 2 + 1; i < COUNT_LIMIT; i += 2*nThread) { if (i%4 ==1) { signTerm = 1; } else { signTerm = -1; } sum += signTerm *4.0/static_cast(i); } } return ; } int main() { vector threads; vector sums(THREAD_COUNT,0.0); double pi{4}; for(int i = 0; i < THREAD_COUNT; ++i) { thread t(ThreadFunction, i+1, ref(sums[i]), THREAD_COUNT); threads.push_back(move(t)); } for( int i = 0; i < THREAD_COUNT; ++i) { threads[i].join(); pi += sums[i]; } cout << setprecision(10); cout << "Pi is approximately " << pi << endl; return 0; }