fork download
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4. #include <random>
  5. #include <chrono>
  6.  
  7. int randomRange(int a, int b)
  8. {
  9. return rand()%(b-a) + a;
  10. }
  11.  
  12. int randomRange11(int a, int b, std::mt19937& gen)
  13. {
  14. std::uniform_int_distribution<> dis(a, b);
  15. return dis(gen);
  16. }
  17.  
  18. int main()
  19. {
  20. srand(time(0));
  21.  
  22. int a = 0;
  23. int b = 1000000000;
  24. int c = 100000000;
  25. int n = 10000;
  26.  
  27. std::cout << "C rand() with modulo, RAND_MAX = " << RAND_MAX << "\n";
  28. int freq[10] = {0};
  29. for (int i = 0; i < n; ++i)
  30. freq[randomRange(a,b)/c]++;
  31. for (int i = 0; i < 10; ++i)
  32. std::cout << i << "e8-" << (i+1) << "e8: " << freq[i] << "\n";
  33.  
  34.  
  35.  
  36. std::cout << "\nC++11 uniform_int_distribution\n";
  37. std::mt19937 rng{std::chrono::high_resolution_clock::now().time_since_epoch().count()};
  38. int freq11[10] = {0};
  39. for (int i = 0; i < n; ++i)
  40. freq11[randomRange11(a,b,rng)/c]++;
  41. for (int i = 0; i < 10; ++i)
  42. std::cout << i << "e8-" << (i+1) << "e8: " << freq11[i] << "\n";
  43. }
Success #stdin #stdout 0s 3460KB
stdin
Standard input is empty
stdout
C rand() with modulo, RAND_MAX = 2147483647
0e8-1e8: 1460
1e8-2e8: 1161
2e8-3e8: 920
3e8-4e8: 923
4e8-5e8: 919
5e8-6e8: 941
6e8-7e8: 923
7e8-8e8: 868
8e8-9e8: 971
9e8-10e8: 914

C++11 uniform_int_distribution
0e8-1e8: 998
1e8-2e8: 1079
2e8-3e8: 989
3e8-4e8: 1030
4e8-5e8: 976
5e8-6e8: 946
6e8-7e8: 1021
7e8-8e8: 942
8e8-9e8: 1047
9e8-10e8: 972