Егор Васильев
июнь 2015.
4720

Как компьютер выбирает случайное число?

Ответить
Ответить
Комментировать
0
Подписаться
7
3 ответа
Поделиться
АВТОР ВОПРОСА ОДОБРИЛ ЭТОТ ОТВЕТ

Да, это серьезная задача в программировании. Случайные числа принципиально важны для шифрования, генерации паролей и в научных экспериментах.

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

Для получения случайного числа наиболее распространенный метод -- обращение к внешнему источнику. Таковым, чаще всего выступает счетчик тактов процессора. Некоторые программы отслеживают движения мышки и тому подобное.

Еще:

Может ли компьютер и человек выдать по-настоящему случайное число?

20

Как в игровых аппаратах генерируются случайные числа?

+1
Ответить

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

В России это даже зафиксировано законодательно. Переформулировав: из каждых 100 жетонов автомат должен отдать не менее 75.

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

Самый примитивный вариант -- использовать тот же ГСЧ, но фильтровать результаты. Но, думаю, при развитости индустрии автоматы делают гораздо интереснее. )

+3
Ответить

*для владельца, естественно это правило трансформируется: из каждых X отдать не больше X минус ЗапланированныйДоход (ограниченный законодательно 25%).

0
Ответить
Ещё 2 комментария

Гриша, современные игровые автоматы являются обычными компьютерами. А принцип работы старых игровых автоматов описан в интересной книге Кевина Митника "Искусство вторжения", отрывок:

дея, по мнению Алекса, заключалась в том, чтобы начать игру, увидеть, какой набор карт выбросил автомат, и ввести эти сведения в свой компьютер. Затем с помощью разработанного алгоритма вычислить положение, в котором находится генератор случайных чисел, и определить, сколько ему еще номеров осталось до того, как будет выброшена комбинация, соответствующая королевскому флэшу.

«Итак, мы работали на нашей тестовой машине и пробовали нашу маленькую программу, которая точно предсказывала нам следующие последовательности карт. Возбуждение нарастало».

Алекс приписывает это возбуждение «осознанию того, что вы умнее кого-то и можете переиграть его. А в нашем случае еще и заработать немного денег».

Они отправились в магазин, отыскали там наручные часы Casio с возможностью отсчета десятых долей секунды и приобрели сразу три штуки для всех троих, кто собирался быть в казино: Ларри должен быть оставаться у компьютера.

Они были готовы начать проверку своего метода. Один из команды должен был начать игру и фиксировать набор карт, которые ему выбрасывал автомат — масть и старшинство каждой из пяти карт. Ларри вводил бы эти данные в их собственный компьютер; хотя их машина и не принадлежала к известным брэндам, это был очень приличный компьютер для их целей, поскольку его процессор был во много раз быстрее тех, что использовались в японских игральных автоматах. Всего за несколько мгновений он вычислял точный момент времени, который должен быть установлен в один из секундомеров Casio.

Когда отсчет времени заканчивался, человек у игрового автомата должен был нажать кнопку «Игра». Это должно было произойти предельно четко, в течение доли секунды. Но это не было слишком сложной проблемой, как объяснил Алекс.

«Двое из н а с какое-то время занимались музыкой. Е с л и вы музыкант и у вас хорошее чувство ритма,то вы можете нажать кнопку в нужный момент в пределах десяти миллисекунд».

Если бы все сработало так, как предполагалось, то машина должна была выбросить игроку набор из пяти последовательных карт одной масти — королевский флэш.

+1
Ответить

о, спасибо за ответ, интересно! )

0
Ответить
Прокомментировать

Генераторы случайных чисел бывают разные :)

Простейший вариант - монетка или игральная кость. Они дают случайный исход, т.к. имеется зависимость от начальных условий - невозможно два раза бросить кубик с одинаковой силой в одинаковом направлении. Или, например, лото, когда человек вытаскивает из мешка шарик с номером.

Но все эти способы неудобны, если нужно получить много случайных чисел и сделать это быстро.

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

В обычных компьютерах радиоактивный распад, конечно, никто использовать не будет, а генерировать случайные числа нужно постоянно - этого требуют киптографические алгоритмы и многие другие. Поэтому обычно используется счетчик тактов процессора, шум в микрофоне или даже движения мыши.

Но и эти способы являются медленными. Поэтому, чаще всего с помощью специальных алгоритмов генерируются так называемые псевдослучайные числа - по многим параметрам их последовательность соответствует последовательности случайных чисел. Главное отличие состоит в том, что эти числа периодически повторяются

6
Прокомментировать
Ответить