#include #include #include #include #include double factorial(double n) { return (n == 1 || n == 0) ? 1 : factorial(n - 1) * n; } int main() { double accuracy; long numberOfLoops = 1; std::cout << "Set accuracy: \n"; std::cin >> accuracy; std::cout << " \n"; double e = 0; long minTime = INFINITY; long maxTime = 0; long sq_time = 0; long mt_time = 0; auto start = std::chrono::high_resolution_clock::now(); auto finish = std::chrono::high_resolution_clock::now(); //Sequenial std::cout << "Sequential:\n"; { e = 0; start = std::chrono::high_resolution_clock::now(); //////////////////////// for (double i = 0; i <= accuracy; i++) { e += 1/factorial(i); } //////////////////////// finish = std::chrono::high_resolution_clock::now(); long currentTime = std::chrono::duration_cast(finish - start).count(); sq_time += currentTime; } std::cout << "Time = " << sq_time / numberOfLoops << "ns\n"; std::cout << "e number = " << std::setprecision(30) << e << "\n\n"; e = 0; minTime = INFINITY; maxTime = 0; //Parallel std::cout << "Parallel:\n"; { e = 0; start = std::chrono::high_resolution_clock::now(); //////////////////////// #pragma omp parallel for for (double i = 0; i <= accuracy; i++) { e += 1 / factorial(i); } //////////////////////// finish = std::chrono::high_resolution_clock::now(); long currentTime = std::chrono::duration_cast(finish - start).count(); mt_time += currentTime; } std::cout << "Avg time = " << mt_time / numberOfLoops << "ns\n"; std::cout << "e number = " << std::setprecision(30) << e << "\n\n"; e = 0; std::cin.ignore(2); return 0; }