3using RandomGen = std::mt19937;
4extern RandomGen g_RandomNumberGenerator;
10random_up_to(RandomGen& rng,
int limit) ->
int
12 RandomGen::result_type res = rng();
15 RandomGen::result_type up_to_max =
16 RandomGen::max() - (RandomGen::max() % limit);
17 while (res > up_to_max) {
21 return static_cast<int>(res % limit);
25random_up_to(
int limit) ->
int
27 return random_up_to(g_RandomNumberGenerator, limit);
33 return static_cast<float>(g_RandomNumberGenerator() / 4294967296.0);
37RandomFloat(
float fLow,
float fHigh) ->
float
40 return (RandomFloat() * (fHigh - fLow)) + fLow;
44RandomInt(
int low,
int high) ->
int
46 return random_up_to(g_RandomNumberGenerator, high - low + 1) + low;
50RandomInt(
int n) ->
int
52 return random_up_to(g_RandomNumberGenerator, n);
56RandomInt(RandomGen& rng,
int n) ->
int
58 return random_up_to(rng, n);
63randomf(
const float low = -1.F,
const float high = 1.F) ->
float
65 return RandomFloat(low, high);