Чтобы проверить мой код C ++, я бы хотел, чтобы Boost :: Random и Matlab создавали одинаковые случайные числа.
Так что для Boost я использую код:
boost::mt19937 var(static_cast<unsigned> (std::time(0)));
boost::uniform_int<> dist(1, 6);
boost::variate_generator<boost::mt19937&, boost::uniform_int<> > die(var, dist);
die.engine().seed(0);
for(int i = 0; i < 10; ++i) {
std::cout << die() << " ";
}
std::cout << std::endl;
Который производит (каждый запуск программы):
4 4 5 6 4 6 4 6 3 4
И для Matlab я использую:
RandStream.setDefaultStream(RandStream('mt19937ar','seed',0));
randi(6,1,10)
Который производит (каждый запуск программы):
5 6 1 6 4 1 2 4 6 6
Что странно, поскольку оба используют один и тот же алгоритм и одно и то же начальное число.Что мне не хватает?
Кажется, что Python (используя numpy) и Matlab кажутся сопоставимыми в случайных единообразных числах: Matlab
RandStream.setDefaultStream (RandStream ('mt19937ar', 'seed', 203)); rand (1,10)
0.8479 0.1889 0.4506 0.6253 0.9697 0.2078 0.5944 0.9115 0.2457 0.7743
Python: random.seed (203); random.random (10)
array([ 0.84790006, 0.18893843, 0.45060688, 0.62534723, 0.96974765,
0.20780668, 0.59444858, 0.91145688, 0.24568615, 0.77430378])
C ++ Boost
0.8479 0.667228 0.188938 0.715892 0.450607 0.0790326 0.625347 0.972369 0.969748 0.858771
То же самое, что и любое другое значение Python и Matlab ...