Теоретическая часть
Хороший арифметический генератор случайных чисел должен обладать следующими свойствами:
1) Получаемые числа должны быть равномерно распределены в интервале [0,1] и не должны иметь корреляции друг с другом, в противном случае результаты моделирования могут оказаться полностью недействительными.
2) Чтобы генератор можно было использовать на практике, он должен обладать быстродействием и не требовать больших затрат памяти.
3) Генератор должен обеспечивать возможность точно воспроизводить заданный поток случайных чисел.
4) В генераторе должен быть предусмотрен простой способ получения отдельных потоков случайных чисел. Поток — это просто часть последовательности случайных чисел, производимых генератором, очередной поток начинается в том месте, где заканчивается предыдущий.
Одной из исторически первых процедур получения псевдослучайных чисел была процедура, получившая название метода серединных квадратов, который был предложен фон Нейманом и Метрополисом в 1940-х годах.
Алгоритм получения последовательности случайных чисел методом серединных квадратов сводится к следующему:
Пусть имеется 2n - разрядное число, меньше 1:
![]() |
возведем его в квадрат:
,
а затем возьмем средние 2n разрядов:
,
которые и будут очередным числом.
Например:
![]() | ||
![]() | ||
![]() |
и т.д.
Недостатком этого метода является наличие корреляции между числами последовательности, а в ряде случаев случайность вообще может отсутствовать.
Например:
![]() | |
![]() |
Метод срединных квадратов вовсе не является случайным, то есть непредсказуемым (это наиболее существенный его недостаток). На самом деле, если мы знаем одно число, следующее число является полностью предопределенным, поскольку правило его получения неизменно. Фактически, когда задается x0, предопределяется вся последовательность чисел xi. Это замечание касается всех арифметических генераторов.