rangeUniform static method
- int limit
Return a random integer uniformly distributed in the range [0, limit)
with no division, using rejection sampling. The mask m
is used to
minimize rejections, which will be at worst 50%.
Implementation
static int rangeUniform(int limit) {
assert(limit > 0);
int m = limit - 1;
for (int i in [1, 2, 4, 8, 16]) {
m |= m >> i;
}
while (true) {
int r = next32() & m;
if (r < limit) {
return r;
}
}
}