Сколько времени делает поток Случайных ().Next (), берут, пока он не повторяется?

Рассмотрите.NET Random поток:

var r = new Random(); 
while (true) 
{ 
    r.Next(); 
}

Сколько времени занимает повториться?

9
задан Randy supports Monica 15 February 2011 в 05:20
поделиться

1 ответ

Согласно документации:

псевдослучайные числа выбираются с равной вероятностью из конечного Набор чисел. Выбранные числа не полностью случайным, потому что Определенный математический алгоритм используется для их выбора, но они достаточно случайно для практического цели. Текущая реализация из случайного класса основан на Дональде Вычитающий случайное случае Э. Кнут Генератор алгоритм. Для большего Информация, см. Д. Э. Кнут. "Искусство компьютерного программирования, том 2: Семинемрические алгоритмы ". Аддисон-Уэсли, чтение, мА, вторая Edition, 1981.

Вычитающий генератор (Knuth, Vol 2) XF, N = (XF, N-K - XF, N-J) MOD 1. См. Кнут для таблицы возможных значений K и J. Мы выбираем k = 63, j = 31. Этот генератор интересен, потому что:

  • Это имеет длительный период. Период наименее значимого бита в этой последовательности составляет 2 k -1. Фактический период намного дольше, чем это.
  • С некоторыми мягкими ограничениями, арифметическая точка с плавающей точкой точна!

Второе свойство удерживает, когда X имеет форму формы L 247. (0 � л <247) Одноточная арифметика имеет точное на слияниях (48-битная мантисса), а также арифметическая арифметика двойной прецизионной на компьютерах, соответствующих IEEE.

Это позволяет создавать основную последовательность случайных чисел в соответствии с кодом Fortran

  x(n) = x(n-k) - x(n-j)
  if (x(n) < 0.0) x(n) = 1.0 + x(n)

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

Упомянутый алгоритм имеет период, который зависит от значения семян - вы можете найти подробнее здесь .

13
ответ дан 4 December 2019 в 15:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: