logo
 
?

как работает генератор случайных чисел

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

Возьмем, например, игры без рандомных (случайных) событий — монстры всегда будут атаковать вас одинаково, вы всегда будете находить одни и те же предметы (или артефакты), макеты темниц, подземелий никогда не будет меняться …, в общем, сюжет такой игры – не очень и вряд ли вы долго будете её наслаждаться. В реальной жизни мы часто бросаем монетку (орел/решка), кости или перетасовываем карты.

Эти события включают в себя так много физических переменных (например, сила тяжести, трение, сопротивление воздуха …), что они становятся почти невозможными для прогнозирования или контроля и выдают результаты, которые во всех смыслах случайны.

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

Компьютеры живут в контролируемом электрическом мире, где есть только два значения (false и true), чего-то среднего между ними нет.

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

Когда мы говорим компьютеру посчитать, сколько будет 2 2, мы хотим, чтобы ответ был 4. Следовательно, компьютеры неспособны генерировать случайные числа. Вместо этого они могут имитировать случайность, что достигается с использованием генераторов псевдослучайных чисел.

Генератор псевдослучайных чисел (ГПСЧ) – это программа, которая принимает стартовое (начальное) число и выполняет с ним определенные математические операции, чтобы преобразовать его в другое число, которое совсем не связанное со стартовым.

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

Применяя этот алгоритм к последнему сгенерированному значению, программа может сгенерировать целый ряд новых чисел, которые будут казаться случайными (при условии, что алгоритм будет достаточно сложным). Вот небольшая программа, которая генерирует 100 рандомных чисел: 18256 4675 32406 6217 2746 13525 25960 2907 12974 26465 13684 10471 19898 12269 23424 23667 16070 3705 22412 9727 148 1419 8926 3473 20900 31511 5610 11805 20400 1699 24310 25769 9148 10287 32258 12597 19912 24507 29454 5057 19924 11591 15898 3149 9184 4307 24358 6873 20460 2655 22066 16229 20984 6635 9022 31217 10756 16247 17994 19069 22544 31491 16214 12553 23580 19599 3682 11669 13864 13339 13166 16417 26164 12711 11898 26797 27712 17715 32646 10041 18508 28351 9874 31685 31320 11851 9118 26193 68 26333 24688 28515 8118 32105 Каждое число кажется довольно случайным по отношению к предыдущему.

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

C (и C также) имеет свой собственный встроенный генератор случайных чисел.