RANDU - это линейный конгруэнтный генератор псевдослучайных чисел ( LCG) типа Парка – Миллера, который используется с 1960-х годов. Он определяется повторением :
с начальным начальным числом, как нечетное число. Он генерирует псевдослучайные целые , которые равномерно распределены в интервале [1, 2 - 1], но в практических приложениях часто преобразуются в псевдослучайные рациональные в интервале (0, 1) по формуле:
IBM RANDU широко считается одним из самых плохих задуманные генераторы случайных чисел, когда-либо разработанные, и были описаны как «поистине ужасные» Дональдом Кнутом. Он не справляется со спектральным тестом для измерений больше 2, и каждый целочисленный результат является нечетным. Однако при преобразовании в числа с плавающей запятой одинарной точности (32 бита, 24 бита мантисса) отбрасываются как минимум восемь младших битов.
Причина выбора этих конкретных значений заключается в том, что при 32-битном целочисленном размере слова арифметика по модулю 2 и вычисления могут быть выполнены быстро, используя специальные возможности некоторого компьютерного оборудования.
В общем, когда LCG с модулем 2 используется для создания точек (x k, x k + 1, x k + 2) в трехмерном пространстве, точки попадают в не более 2344 параллельных плоскостей, результат указывает на непригодность LCG для моделирования Монте-Карло. Выбор множителя определяет количество самолетов. Чтобы показать проблему со значениями множителя 65539 и модуля 2, выбранными для RANDU, рассмотрим следующий расчет, в котором каждый член должен быть взят по модулю 2. Начнем с записи рекурсивного отношения как:
который становится после расширения квадратичного множителя:
и позволяет нам показать корреляцию между тремя точками как:
В результате этой корреляции каждая точка лежит в одной из набора параллельных плоскостей, расположенных на расстоянии 2, 15 из которых пересекаются куб 2 x 2 x 2, содержащий точки. В результате широкого использования RANDU в начале 1970-х годов многие результаты того времени считаются подозрительными.
Это неправильное поведение уже было обнаружено в 1963 году на 36-битном компьютере и тщательно повторно реализовано на 32-битном компьютере. -бит IBM System / 360. Считалось, что к началу 1990-х он был широко очищен, но компиляторы FORTRAN все еще использовали его вплоть до 1999 года.
Начало периода вывода RANDU для начального числа :
Викицитатник содержит цитаты, связанные с: RANDU |