fork download
  1. #include <climits>
  2. #include <cstdlib>
  3. #include <random>
  4. #include <functional>
  5.  
  6. double rand(unsigned count, unsigned sides) {
  7. if (count<=100) {
  8. int result=0;
  9. for(int i=0; i<count; ++i)
  10. result += rand()/(RAND_MAX/sides);
  11. return result;
  12. }
  13. static std::mt19937_64 engine;
  14. const double mean = .5*count*sides;
  15. const double stddev = std::sqrt(count*(1.0*sides*sides-1.0)/12.0);
  16. std::normal_distribution<double> distribution(mean, stddev);
  17. return distribution(engine);
  18. }
  19.  
  20. #include <iostream>
  21.  
  22. int main() {
  23. int count, sides;
  24. while(std::cin >> count >> sides) {
  25. std::cout << count << 'd' << sides << '=' << rand(count, sides) << '\n';
  26. }
  27. return 0;
  28. }
Success #stdin #stdout 0s 2836KB
stdin
1 6
1 6
1 6
1 6
1 6
1 6
1 6
1 6
1 6
1 6
1 6
100 100
100 100
100 100
100 100
100 100
100 100
100 100
100 100
100 100
100 100
10000 10000
10000 10000
10000 10000
10000 10000
10000 10000
10000 10000
10000 10000
10000 10000
10000 10000
10000 10000
1000000 1000000
1000000 1000000
1000000 1000000
1000000 1000000
1000000 1000000
1000000 1000000
1000000 1000000
1000000 1000000
1000000 1000000
1000000 1000000
stdout
1d6=5
1d6=2
1d6=4
1d6=4
1d6=5
1d6=1
1d6=2
1d6=4
1d6=1
1d6=3
1d6=2
100d100=5421
100d100=5110
100d100=5061
100d100=4714
100d100=4816
100d100=5705
100d100=4772
100d100=4795
100d100=4864
100d100=4873
10000d10000=4.98016e+07
10000d10000=5.00581e+07
10000d10000=4.99841e+07
10000d10000=4.93835e+07
10000d10000=5.01313e+07
10000d10000=5.00396e+07
10000d10000=5.03334e+07
10000d10000=4.92201e+07
10000d10000=4.97531e+07
10000d10000=4.97785e+07
1000000d1000000=4.99785e+11
1000000d1000000=4.99972e+11
1000000d1000000=4.9952e+11
1000000d1000000=5.00124e+11
1000000d1000000=4.99976e+11
1000000d1000000=5.00105e+11
1000000d1000000=5.00558e+11
1000000d1000000=5.00012e+11
1000000d1000000=4.99723e+11
1000000d1000000=4.99454e+11