fork(2) download
  1. #include <iostream>
  2. #include <chrono>
  3.  
  4. using namespace std;
  5.  
  6. inline unsigned GenUnsigned()
  7. {
  8. static constexpr unsigned im = 139968, ia = 3877, ic = 29573;
  9. static unsigned last = 42;
  10. return (last = (last * ia + ic) % im);
  11. }
  12.  
  13. inline int GenSigned()
  14. {
  15. static constexpr int im = 139968, ia = 3877, ic = 29573;
  16. static int last = 42;
  17. return (last = (last * ia + ic) % im);
  18. }
  19.  
  20.  
  21. int main()
  22. {
  23. using timer = std::chrono::high_resolution_clock;
  24. using to_ms = std::chrono::duration<double, std::milli>;
  25.  
  26. auto time_start = timer::now();
  27. unsigned long long u_result = 0;
  28. for(unsigned i = 0; i < 200000000u; ++i)
  29. u_result += GenUnsigned();
  30. auto time_end = timer::now();
  31.  
  32. std::cout << "uint time: " << to_ms(time_end - time_start).count() << " result:" << u_result << std::endl;
  33.  
  34. time_start = timer::now();
  35. long long i_result = 0;
  36. for(int i = 0; i < 200000000; ++i)
  37. i_result += GenSigned();
  38. time_end = timer::now();
  39.  
  40. std::cout << " int time: " << to_ms(time_end - time_start).count() << " result:" << i_result << std::endl;
  41.  
  42. return 0;
  43. }
  44.  
Success #stdin #stdout 1.6s 4512KB
stdin
Standard input is empty
stdout
uint time: 770.316 result:13996696082304
 int time: 823.6 result:13996696082304