fork download
  1. #include <chrono>
  2. #include <iostream>
  3. #include <cmath>
  4.  
  5. class TimeMeasure {
  6. public:
  7. TimeMeasure() {
  8. start();
  9. }
  10. void start() {
  11. m_start = now();
  12. }
  13. int elapsed_ms() const {
  14. return elapsed< std::chrono::milliseconds >();
  15. }
  16. int elapsed_mks() const {
  17. return elapsed< std::chrono::microseconds >();
  18. }
  19.  
  20. private:
  21. template< class D >
  22. int elapsed() const {
  23. return std::chrono::duration_cast< D >( now() - m_start ).count();
  24. }
  25. const std::chrono::system_clock::time_point now() const {
  26. return std::chrono::system_clock::now();
  27. }
  28. std::chrono::system_clock::time_point m_start;
  29. };
  30.  
  31. template< class F >
  32. void measure_ms( const char * const text, F f ) {
  33. TimeMeasure m;
  34. f();
  35. int t = m.elapsed_ms();
  36. std::cout << text << " : " << t << " ms." << std::endl;
  37. }
  38.  
  39. template< class F >
  40. void measure_mks( const char * const text, F f ) {
  41. TimeMeasure m;
  42. f();
  43. int t = m.elapsed_mks();
  44. std::cout << text << " : " << t << " mks." << std::endl;
  45. }
  46.  
  47. const int times = 1000000;
  48.  
  49. double MODF()
  50. {
  51. double param, fractpart, intpart;
  52. for( int i=0; i<times; ++i )
  53. {
  54. param = rand();
  55. fractpart = modf (param , &intpart);
  56. }
  57. return intpart;
  58. }
  59.  
  60. double MODF_CASTAWAY()
  61. {
  62. double param;
  63. int fractpart, intpart;
  64. for( int i=0; i<times; ++i )
  65. {
  66. param = rand();
  67. intpart = (int)floor( param );
  68. fractpart = (int)((param - intpart));
  69. }
  70. return intpart;
  71. }
  72.  
  73. int main()
  74. {
  75. measure_mks( "modf_castaway", MODF_CASTAWAY );
  76. measure_mks( "modf", MODF );
  77. }
  78.  
Success #stdin #stdout 0.11s 3296KB
stdin
Standard input is empty
stdout
modf_castaway : 63857 mks.
modf : 44849 mks.