Рассмотрите.NET Random
поток:
var r = new Random();
while (true)
{
r.Next();
}
Сколько времени занимает повториться?
Согласно документации:
псевдослучайные числа выбираются с равной вероятностью из конечного Набор чисел. Выбранные числа не полностью случайным, потому что Определенный математический алгоритм используется для их выбора, но они достаточно случайно для практического цели. Текущая реализация из случайного класса основан на Дональде Вычитающий случайное случае Э. Кнут Генератор алгоритм. Для большего Информация, см. Д. Э. Кнут. "Искусство компьютерного программирования, том 2: Семинемрические алгоритмы ". Аддисон-Уэсли, чтение, мА, вторая Edition, 1981.
Вычитающий генератор (Knuth, Vol 2) XF, N = (XF, N-K - XF, N-J) MOD 1. См. Кнут для таблицы возможных значений K и J. Мы выбираем k = 63, j = 31. Этот генератор интересен, потому что:
Второе свойство удерживает, когда 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)
в практике случайные числа генерируются в партиях по мере необходимости и хранятся в массиве, который действует как круговой буфер.
Упомянутый алгоритм имеет период, который зависит от значения семян - вы можете найти подробнее здесь .