Введение

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

В математике

Метод был изобретен Джоном фон Нейманом и описан им на конференции в 1949 году. В своей речи в 1949 году фон Нейман остроумно заметил, что "любой, кто рассматривает арифметические методы для генерации случайных цифр, конечно, совершает грех". Он пояснил, что истинных "случайных чисел" не существует, есть лишь способы их получения, и "строгая арифметическая процедура", такая как метод середины квадрата, "не является таковым". Тем не менее, он обнаружил, что эти методы в сотни раз быстрее, чем считывание "действительно" случайных чисел с перфокарт, что имело практическую ценность для его работы с ENIAC. Он считал, что "деградация" последовательностей середины квадрата является их преимуществом, поскольку её можно легко обнаружить: "всегда есть опасение появления незамеченных коротких циклов". В книге Ивара Экеланда "Сломанный кубик" подробно рассказывается о том, как этот метод был изобретен францисканским монахом, известным лишь как брат Эдвин, между 1240 и 1250 годами. Предположительно, рукопись утеряна, но Хорхе Луис Борхес прислал Экеланду копию, сделанную им в Ватиканской библиотеке. Модификация алгоритма середины квадрата с использованием последовательности Вейля улучшает период и случайность.

Метод

Для создания последовательности псевдослучайных чисел с n цифр создается начальное значение с n цифр и возводится в квадрат, в результате чего получается число с 2n цифр. Если в результате получается меньше 2n цифр, то для компенсации добавляются ведущие нули. Средние n цифр результата становятся следующим числом в последовательности и возвращаются как результат. Этот процесс повторяется для генерации дополнительных чисел. Значение n должно быть четным для корректной работы метода; если n нечетное, то однозначно определить "средние n цифр" для выбора не всегда возможно. Например, при возведении в квадрат трехзначного числа может получиться шестизначное число (например, 540<sup>2</sup> = 291600). Если бы существовали средние 3 цифры, то осталось бы 6 − 3 = 3 цифры для распределения по обе стороны от середины. Равномерно распределить эти цифры по обе стороны от среднего числа невозможно, следовательно, "средних цифр" не существует. Допускается дополнять начальные значения нулями слева для получения n, являющегося четным числом (например, 540 → 0540). Для генератора n-значных чисел период не может превышать 8n. Если все n средних цифр равны нулю, генератор будет бесконечно выдавать нули. Если первая половина числа в последовательности состоит из нулей, последующие числа будут уменьшаться до нуля. Хотя такие последовательности нулей легко обнаружить, они возникают слишком часто, чтобы метод был практически полезен. Метод квадратичного среднего также может зацикливаться на числе, отличном от нуля. При n = 4 это происходит со значениями 0100, 2500, 3792 и 7600. Другие начальные значения формируют очень короткие повторяющиеся циклы, например, 0540 → 2916 → 5030 → 3009. Эти явления становятся еще более заметными при n = 2, поскольку ни одно из 100 возможных начальных значений не генерирует более 14 итераций без возврата к значениям 10, 20, 60, 80 или циклу 42 ↔ 75.