I get random double number [0,1) from mersenne twister. How would I get random [0,x) from mersenne twister output?
Mersenne twister outputs either random integer in total range or random [0,1)
It is important that it is evenly distributed, so I doubt that basic floor(mersenneRandom()*x) will do.
if it does, then great.
Another case for your favorite reference!
#include <random>
#include <iostream>
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_real_distribution<> dis(1, 2);
for (int n = 0; n < 10; ++n) {
std::cout << dis(gen) << ' ';
}
std::cout << '\n';
}
(taken from here) generates values in [1,2), and the site explains how to do it for arbitrary [a,b)!
If you need integers, use std::uniform_int_distribution.
floor(mersenneRandom()*x)
does indeed not work because the difference between a double
-value and the next greater one becomes greater than one for big numbers. You would skip all integers between those two values.