I want to have to independent random distributions of integers in a configurable range. What I had originally is illustrated by the following program:
#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;
}
This turns out to always generate equal values when argv[1] and argv[2] are equal, and has less obvious dependencies when they are different as well. For in case I used different engine instances, and even seeded them differently.
What is going on here? I noticed that the problem goes away if I replace the default_random_engine by the mt19937, but that is something I never would have guessed. Also, is the other engine supposed to be able to produce independent samples?
Aucun commentaire:
Enregistrer un commentaire