Какова основная логика генерации случайных чисел? - PullRequest
1 голос
/ 21 января 2011
private void RandomNumber_Click(object sender, EventArgs e)
        {
            Random randnumber = new Random();
            MessageBox.Show(randnumber.Next(1, 150).ToString());
        } 

в vb 6.0 генерируются случайные числа, но если мы выйдем из приложения и снова запустим его, то порядок генерации случайных чисел будет таким же, как и в dotnet, это не похоже на то, что генерация случайных чисел идеальна! как это возможно ? какая логика стоит за этим?

Ответы [ 5 ]

11 голосов
/ 21 января 2011

Генератор случайных чисел - это, в основном, детерминированная функция, делающая одно число из другого. Если вы начнете с заданного значения, вы всегда получите один и тот же результат. Обычно (для рандомизации) первый вход в генератор случайных чисел генерируется из текущего времени (это называется начальным числом). .NET просто делает это по умолчанию, vb 6.0, вероятно, нет.

Цитата из J. von Neumann

Любой, кто рассматривает арифметические методы получения случайных цифр, конечно, находится в состоянии греха.

2 голосов
/ 21 января 2011

В VB6 обычно звонят

Randomize Timer

, чтобы каждый раз получать различную последовательность чисел.

2 голосов
/ 21 января 2011

Предоставление действительно случайных чисел всегда было одной из самых сложных задач в информатике.Проблема не решена.Я могу гарантировать вам, что в .NET генерация случайных чисел отнюдь не «идеальна».Это просто на несколько градусов лучше, чем в VB6.

Redgate Reflector сообщает, что в .NET конструктор по умолчанию для класса Random () предоставляет Environment.TickCount в качестве начального числа по умолчанию (миллисекунды с момента последнегозагрузки).VB6, вероятно, имеет константу в качестве значения по умолчанию.

0 голосов
/ 21 января 2011

Мне пару дней назад сказали, что при создании нового класса Random он совпадает с

Random r = new Random(Environment.TickCount);

Вот почему номер отличается

0 голосов
/ 21 января 2011

В dotNet Random класс использует текущее системное время в качестве начального числа.Кажется, что vb 6.0 всегда использует одно и то же семя.

...