fork download
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <cmath>
  4. #include <chrono>
  5.  
  6. class muTimer
  7. {
  8. using Clock = std::chrono::high_resolution_clock;
  9. bool active = false;
  10. Clock::duration duration_;
  11. Clock::time_point start_ = Clock::now(), stop_ = Clock::now();
  12.  
  13. muTimer(const muTimer&) = delete;
  14. muTimer& operator=(const muTimer&) = delete;
  15. public:
  16. using ns = std::chrono::nanoseconds;
  17. using mks = std::chrono::microseconds;
  18. using ms = std::chrono::milliseconds;
  19. muTimer() { reset(); start(); }
  20. ~muTimer() = default;
  21. muTimer& reset()
  22. {
  23. duration_ = std::chrono::nanoseconds(0);
  24. active = false;
  25. return *this;
  26. }
  27. muTimer& start()
  28. {
  29. if (!active)
  30. {
  31. start_ = Clock::now();
  32. active = true;
  33. }
  34. return *this;
  35. }
  36. muTimer& stop()
  37. {
  38. if (active)
  39. {
  40. stop_ = Clock::now();
  41. duration_ += stop_ - start_;
  42. active = false;
  43. }
  44. return *this;
  45. }
  46. template<typename T = mks>
  47. unsigned long long duration()
  48. {
  49. return static_cast<unsigned long long>
  50. (std::chrono::duration_cast<T>(stop_-start_).count());
  51. }
  52. };
  53.  
  54.  
  55. using namespace std;
  56.  
  57. double pi = 3.14159265358;
  58.  
  59. double Paul(double x, double eps)
  60. {
  61. double y = 1, summa = 0, last = 1;;
  62. for (; fabs(last) > eps;)
  63. {
  64. last = pow(-1, y) * pow(x, 2 * y - 1) / (2 * y - 1);
  65. summa += last;
  66. y+=1;
  67. }
  68. return pi/2 + summa;
  69. }
  70.  
  71. double Harry(double x, double eps)
  72. {
  73. double summ = pi/2 - x, x2n_1 = -x;
  74. x *= x;
  75.  
  76. for(int k = 3; fabs(x2n_1/k) > eps; k += 2)
  77. {
  78. x2n_1 *= -x;
  79. summ += x2n_1/k;
  80. }
  81. return summ;
  82. }
  83.  
  84. int main()
  85. {
  86. {
  87. muTimer mt;
  88. double z = 0;
  89. for(double x = 0; x < 0.95; x += 0.000001)
  90. z += Paul(x,1e-10);
  91. mt.stop();
  92. cout << z << " for " << mt.duration<>() << " mks\n";
  93. }
  94. {
  95. muTimer mt;
  96. double z = 0;
  97. for(double x = 0; x < 0.95; x += 0.000001)
  98. z += Harry(x,1e-10);
  99. mt.stop();
  100. cout << z << " for " << mt.duration<>() << " mks\n";
  101. }
  102. }
  103.  
Success #stdin #stdout 1.69s 4180KB
stdin
Standard input is empty
stdout
1.09207e+06 for 1496617 mks
1.09207e+06 for 192588 mks