32 votes

Obtenir la même séquence de nombres aléatoires sur différents systèmes d'exploitation avec la même graine

Existe-t-il un moyen d'obtenir la même séquence de nombres int aléatoires dans différents systèmes d'exploitation avec la même graine? J'ai essayé ce code:

 std::default_random_engine engine(seed);
std::uniform_int_distribution<int> dist(0, N-1);
 

Si j'ai exécuté ce code sur une même machine plusieurs fois avec la même graine, la séquence de dist (engine) est la même, mais la séquence du système d'exploitation est différente.

38voto

NathanOliver Points 10062

Oui, mais vous avez besoin d'un autre ou, pour parler exactement, le même PRNG sur chaque plate-forme. std::default_random_engine engine est une mise en œuvre définies PRNG. Cela signifie que vous ne pouvez pas obtenir le même PRNG sur chaque plate-forme. Si vous n'avez pas le même alors vos chances d'obtenir la même séquence est assez faible.

Ce que vous avez besoin est quelque chose comme std::mt19937 ce qui est nécessaire pour donner le même résultat pour la même graine. En fait, tous les générateurs définis en <random> en plus d' std::default_random_engine engine produira le même résultat lors de l'utilisation de la même graine.

L'autre chose que vous devez savoir, c'est qu' std::uniform_int_distribution est également définie par l'implémentation. La formule à utiliser est défini, mais la manière qu'il réalise que c'est laissé à l'implémenteur. Cela signifie que vous ne pouvez pas obtenir exactement la même sortie. Si vous avez besoin de portabilité, vous aurez besoin de vous rouler propre réseau de distribution ou d'obtenir d'une tierce partie qui sera toujours la même, indépendamment de la plate-forme.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X