Я хочу иметь независимые случайные распределения целых чисел в настраиваемом диапазоне. То, что у меня было изначально, иллюстрируется следующей программой:
#include <random>
#include <cstdio>
#include <cstdlib>
using namespace std;
int main(int argc, char* argv[])
{
default_random_engine generator1;
default_random_engine generator2;
uniform_int_distribution<int> dist1(0,atoi(argv[1]));
uniform_int_distribution<int> dist2(0,atoi(argv[2]));
generator1.seed(0);
generator2.seed(1);
for (int i = 0; i < 60; i++)
printf("(%d, %d)\n", dist1(generator1), dist2(generator2));
return 0;
}
Получается, что всегда генерируются равные значения, когда argv [1] и argv [2] равны, и имеет менее очевидные зависимости, когда они также различны. Потому что на случай, если я использовал разные экземпляры движка и даже посеял их по-разному.
Что здесь происходит? Я заметил, что проблема исчезнет, если я заменю default_random_engine на mt19937, но об этом я бы никогда не догадался. Кроме того, должен ли другой движок производить независимые сэмплы?
РЕДАКТИРОВАТЬ Я работаю над Ubuntu 16.04.2, с g ++ 7.3.0 из стандартных репозиториев.
РЕДАКТИРОВАТЬ 2 Как предположил Франсуа Андрие в комментариях, это, похоже, является особенностью конкретного генератора случайных чисел по умолчанию в моем окружении: семена 0 и 1, кажется, генерируют одинаковую последовательность случайных чисел. Все остальные комбинации генерируют кажущиеся независимыми выборки.