Derga

Untitled

Jun 19th, 2024
461
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.19 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <chrono>
  4. #include <cmath>
  5. #include <ctime>
  6.  
  7. long double recursivePowImpl(long double x, int n) {
  8.     if (n == 0) return 1.;
  9.     return x * recursivePowImpl(x, n - 1);
  10. }
  11.  
  12. long double recursivePow(long double x, int n) {
  13.     if (n >= 0) {
  14.         return recursivePowImpl(x, n);
  15.     }
  16.     return (1 / recursivePowImpl(x, std::fabs(n)));  // fabs - берет модуль от числа
  17. }
  18.  
  19. long double iterativePow(long double x, int n) {
  20.     if (n == 0) return 1.;
  21.  
  22.     long double result = 1.;
  23.     for (int i = 0; i < std::fabs(n); ++i) {
  24.         result *= x;
  25.     }
  26.    
  27.     if (n > 0) {
  28.         return result;
  29.     }
  30.     return 1 / result;
  31. }
  32.  
  33. int main()
  34. {
  35.     setlocale(LC_ALL, "Russian");
  36.    
  37.     long double x;
  38.     int n;
  39.     std::cout << "Введите вещественное число для х: ";
  40.     std::cin >> x;
  41.    
  42.     if (x == 0.) {
  43.         std::cout << "х = 0. попробуйте другие числа" << std::endl;
  44.         return 0;
  45.     }
  46.  
  47.     std::cout << std::endl << "Введите целое число для n: ";
  48.     std::cin >> n;
  49.     std::cout << std::endl;
  50.  
  51.     auto start = std::chrono::high_resolution_clock::now();
  52.     iterativePow(x, n);
  53.     auto end = std::chrono::high_resolution_clock::now();
  54.  
  55.     double iterative_impl_time_taken =
  56.         std::chrono::duration_cast<std::chrono::nanoseconds>(end - start).count();
  57.     iterative_impl_time_taken *= 1e-9;
  58.  
  59.  
  60.     start = std::chrono::high_resolution_clock::now();
  61.     recursivePow(x, n);
  62.     end = std::chrono::high_resolution_clock::now();
  63.     double recursive_impl_time_taken =
  64.         std::chrono::duration_cast<std::chrono::nanoseconds>(end - start).count();
  65.     recursive_impl_time_taken *= 1e-9;
  66.  
  67.  
  68.     std::cout << "время работалы итеративной программы : " << std::fixed << iterative_impl_time_taken
  69.               << std::setprecision(9) << " секунд." << std::endl;
  70.     std::cout << "время работалы рекурсивной программы : " << std::fixed << iterative_impl_time_taken
  71.         << std::setprecision(9) << " секунд." << std::endl;
  72.  
  73.     return 0;
  74. }
  75.  
Advertisement
Add Comment
Please, Sign In to add comment