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