EDIT: это не дубликат, и это не результат наивного непонимания использования генератора случайных чисел. Спасибо.
Кажется, я обнаружил повторяющийся шаблон в числах, сгенерированных классом System.Random. Я использую "мастер" случайный экземпляр для генерации семени для второго "основного" случайного экземпляра. Значения, полученные в этом основном случайном экземпляре, имеют повторяющийся шаблон. В частности, произведенное 3-е число очень предсказуемо.
В приведенной ниже программе показана проблема. Обратите внимание, что каждое другое значение используется каждый раз через цикл.
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;
}
Я думаю, что это должно произвести произвольный вывод, но фактический вывод на моем ящике:
84
84
84
84
84
84
84
84
84
84
84
...
Может ли кто-нибудь объяснить, что здесь происходит? Изменение констант OFFSET и LIMIT изменяет выходное значение, но оно всегда повторяется.