J'ai le code suivant, que j'ai écrit pour tester une partie d'un vaste programme :
#include <fstream>
#include <random>
#include <iostream>
using namespace std ;
int main()
{
mt19937_64 Generator(12187) ;
mt19937_64 Generator2(12187) ;
uniform_int_distribution<int> D1(1,6) ;
cout << D1(Generator) << " " ;
cout << D1(Generator) << " " << D1(Generator) << endl ;
cout << D1(Generator2) << " " << D1(Generator2) << " " << D1(Generator2) << endl ;
ofstream g1("g1.dat") ;
g1 << Generator ;
g1.close() ;
ofstream g2("g2.dat") ;
g2 << Generator2 ;
g2.close() ;
}
Les deux générateurs sont ensemencés avec la même valeur, et donc j'ai attendu la deuxième ligne dans la sortie pour être identique à la première. Au lieu de cela, la sortie est
1 1 3
1 3 1
L'état des deux générateurs imprimés dans l' *.dat
des fichiers est la même. Je me demandais si il pourrait y avoir quelques cachée du multi-threading dans la génération de nombre aléatoire provoquant l'ordre d'incompatibilité.
J'ai compilé avec g++
version 5.3.0, sur Linux, avec le drapeau de l' -std=c++11
.
Merci d'avance pour votre aide.