fork download
  1. #include <iostream>
  2. #include <limits>
  3. #include <random>
  4. #include <type_traits>
  5.  
  6. template <typename TYPE>
  7. std::uniform_int_distribution<TYPE> getDice(std::true_type)
  8. {
  9. return std::uniform_int_distribution<TYPE>(std::numeric_limits<TYPE>::min(), std::numeric_limits<TYPE>::max());
  10. }
  11.  
  12. template <typename TYPE>
  13. std::uniform_real_distribution<TYPE> getDice(std::false_type)
  14. {
  15. return std::uniform_real_distribution<TYPE>(std::numeric_limits<TYPE>::min(), std::numeric_limits<TYPE>::max());
  16. }
  17.  
  18. template<typename TYPE>
  19. TYPE generateRandom()
  20. {
  21. std::random_device randomDevice;
  22. std::mt19937_64 generator(randomDevice());
  23. auto dice = getDice<TYPE>(std::integral_constant<bool, std::numeric_limits<TYPE>::is_integer>());
  24. return dice(generator);
  25. }
  26.  
  27. int main()
  28. {
  29. float r1 = generateRandom<float>();
  30. double r2 = generateRandom<double>();
  31. int r3 = generateRandom<int>();
  32. long r4 = generateRandom<long>();
  33.  
  34. std::cout << "r1: " << r1 << std::endl;
  35. std::cout << "r2: " << r2 << std::endl;
  36. std::cout << "r3: " << r3 << std::endl;
  37. std::cout << "r4: " << r4 << std::endl;
  38. }
  39.  
  40.  
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
r1: 1.46165e+38
r2: 1.6497e+308
r3: -914758250
r4: 5370474771520296542