Как может полностью логическая машина, такая как компьютер, генерировать случайное число?

Carder

Professional
Messages
2,619
Reputation
7
Reaction score
1,681
Points
113
Компьютеры могут генерировать случайные числа двумя способами:

Вы можете создать какое-то устройство, которое отслеживает совершенно случайное естественное событие и отправляет его результаты на компьютер. Например, вы можете поместить кусок радиоактивного материала перед счетчиком Гейгера и подключить счетчик Гейгера к компьютеру. Поскольку радиоактивный распад является случайным, счетчик Гейгера будет создавать действительно случайные числа. Такой подход встречается довольно редко, потому что не у многих людей есть счетчики Гейгера, подключенные к своим машинам. Вы можете создать формулу, которая генерирует псевдослучайное число. При разработке формулы идея состоит в том, чтобы создать строку чисел, которая будет казаться случайной для любого, кто не знает, что это за формула. Характеристики хорошей формулы включают:
  • Без повторов: последовательность не циклически повторяется и не повторяется. Хорошее числовое распределение : если формула производит случайные числа от 0 до 9, количество получаемых ею нулей, единиц, двоек и т. д. Должно быть примерно одинаковым в течение длительного периода времени. Отсутствие предсказуемости: У Вас нет никакой возможности предсказать , что следующий номер будет, если вы не знаете формулу и семени (начальное значение).
Вот пример простой формулы случайных чисел из книги Кернигана и Ричи «Язык программирования C»:
Code:
int rand() {  random_seed = random_seed * 1103515245 +12345;   
return (unsigned int)(random_seed / 65536) % 32768; }

Эта формула предполагает существование переменной с именем random_seed , для которой изначально задано некоторое число. Переменная random_seed умножается на 1 103 515 245, а затем к продукту добавляется 12 345; random_seed затем заменяется этим новым значением. На самом деле это довольно хороший генератор псевдослучайных чисел. У него хорошее распространение, и он не повторяется. Если вы используете его для создания случайных чисел от 0 до 9, вот первые 20 значений, которые он производит, если начальное число равно 10:
Code:
44607423505664567674

Если у вас есть 10000 значений от 0 до 9, вот распределение:
Code:
0 - 10151 - 10242 - 10483 - 9964 - 9885 - 10016 - 9967 - 10068 - 9659 - 961

Любая формула псевдослучайного числа зависит от начального значения для начала последовательности. Если вы начнете с одного и того же начального числа, вы получите ту же последовательность значений из формулы. Итак, если вы дадите функцию rand (), показанную над семенем 10 на одном компьютере, и посмотрите на поток чисел, который она производит, она будет идентична потоку чисел, созданных на любом компьютере, который запускает ее с семенем 10. В случае Глобальной системы позиционирования эта воспроизводимость используется как способ дать каждому спутнику предсказуемый, но разный образец значений, которые может отслеживать приемник GPS.

Чтобы создать случайную и непредсказуемую последовательность, начальное число должно быть действительно случайным числом. Чтобы получить это действительно случайное число для начального числа, большинство программ используют текущую дату и время, преобразованные в целочисленное значение (например, преобразованные в количество секунд, прошедших с 1 января 1970 г.). Поскольку это число меняется каждый раз при запуске программы, это хорошее начальное число.
 
Top