EDIT : Ce n'est pas un doublon, et ce n'est pas le résultat d'une mauvaise compréhension naïve de la façon d'utiliser un générateur de nombres aléatoires. Merci.
Il semble que j'ai découvert un modèle répétitif dans les nombres générés par la classe System.Random. J'utilise une instance aléatoire "maître" pour générer une graine pour une seconde instance aléatoire "principale". Les valeurs produites par cette instance aléatoire principale présentent un modèle répétitif. En particulier, le troisième nombre produit est très prévisible.
Le programme ci-dessous démontre le problème. Notez qu'une valeur d'amorçage différente est utilisée à chaque fois dans la boucle.
using System;
class Program
{
static void Main(string[] args)
{
// repeat experiment with different master RNGs
for (int iMaster = 0; iMaster < 30; ++iMaster)
{
// create master RNG
var rngMaster = new Random(iMaster + OFFSET);
// obtain seed from master RNG
var seed = rngMaster.Next();
// create main RNG from seed
var rngMain = new Random(seed);
// print 3rd number generated by main RNG
var ignore0 = rngMain.Next(LIMIT);
var ignore1 = rngMain.Next(LIMIT);
var randomNumber = rngMain.Next(LIMIT);
Console.WriteLine(randomNumber);
}
}
const int OFFSET = 0;
const int LIMIT = 200;
}
Je pense que cela devrait produire une sortie aléatoire, mais la sortie réelle sur ma boîte est :
84
84
84
84
84
84
84
84
84
84
84
...
Quelqu'un peut-il expliquer ce qui se passe ici ? La modification des constantes OFFSET et LIMIT change la valeur de sortie, mais elle se répète toujours.