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