RANDU
В статье есть список источников, но не хватает сносок. |

RANDU — линейный конгруэнтный генератор псевдослучайных чисел, вошедший в употребление в 1960-х. Он определяется рекуррентным соотношением:
- [math]\displaystyle{ V_{j+1} \equiv (65539 V_j) \mod 2^{31} }[/math]
где [math]\displaystyle{ V_0 }[/math] нечётное.
Псевдослучайные числа вычисляются следующим образом:
- [math]\displaystyle{ X_{j} \equiv V_{j} / 2^{31} }[/math]
Популярно мнение, что данный алгоритм — один из наименее продуманных генераторов псевдослучайных чисел среди когда-либо предложенных, так как он не проходит спектральный тест при количестве измерений, превышающем 2[1] [2].
Основанием для выбора параметров генератора послужило то, что в рамках целочисленной 32-битной машинной арифметики операции по модулю [math]\displaystyle{ 2^{31} }[/math], в частности, умножение произвольного числа на [math]\displaystyle{ 65539=2^{16}+3 }[/math], выполняются эффективно. В то же время такой выбор обладает и принципиальным недостатком. Рассмотрим следующее выражение (будем полагать, что все операции выполняются по модулю [math]\displaystyle{ 2^{31} }[/math]):
- [math]\displaystyle{ x_{k+2}=(2^{16}+3) x_{k+1}=(2^{16}+3 )^2 x_{k} }[/math]
откуда, раскрыв квадратичный сомножитель, получаем:
- [math]\displaystyle{ x_{k+2}=(2^{32}+6 \cdot2^{16} +9 )x_{k}=[6 \cdot (2^{16}+3)-9]x_{k} }[/math]
что, в свою очередь, показывает наличие линейной зависимости (а следовательно, и полной корреляции) между тремя соседними элементами последовательности:
- [math]\displaystyle{ x_{k+2}=6x_{k+1}-9x_{k} }[/math]
Как следствие корреляции, точки в трёхмерном пространстве, координаты которых получены по данному алгоритму, располагаются на сравнительно небольшом количестве плоскостей (в приведённом примере — на 15 плоскостях).[3]
Пример
Пример псевдослучайной последовательности, порождаемой алгоритмом RANDU при начальном значении [math]\displaystyle{ V_0=1 }[/math]:
1
65539
393225
1769499
7077969
26542323
95552217
334432395
1146624417
1722371299
14608041
...
134633675
1893599841
1559961379
907304297
2141591611
388843697
238606867
79531577
477211307
1
Цитаты
Само его название — RANDU (похоже на «random» — «случайный» — Прим. ред.), способно вызвать испуг в глазах и спазмы в желудке у многих учёных, специализирующихся на компьютерах![4]
Оригинальный текст (англ.)…its very name RANDU is enough to bring dismay into the eyes and stomachs of many computer scientists![5]
Один из нас вспоминает, что получил однажды графическое изображение «случайной» последовательности, состоящее всего из 11 плоскостей. В ответ на это консультант вычислительного центра по программированию заявил, что генератор случайных чисел использовался неверно: «Мы гарантируем, что каждое число случайно само по себе, но не гарантируем, что случайно более чем одно из них». Попробуйте такое понять.
Оригинальный текст (англ.)One of us recalls producing a «random» plot with only 11 planes, and being told by his computer center’s programming consultant that he had misused the random number generator: «We guarantee that each number is random individually, but we don’t guarantee that more than one of them is random». Figure that out.[6]
Примечания
- ↑ Peter Young. Randu: a bad random number generator. Physics 115/242 (April 24, 2013). Дата обращения: 11 сентября 2017. Архивировано 22 декабря 2018 года.
- ↑ RANDU: the bad random number generator. GitHub (16 Feb 2016). Дата обращения: 11 сентября 2017. Архивировано 31 июля 2016 года.
- ↑ George Marsaglia. Random Numbers Fall Mainly in the Planes // Proc National Academy of Sciences : журнал. — сентябрь 1968. — Т. 61, № 1. — С. 25—28.
- ↑ Дональд Кнут. Глава 3.3. Спектральный критерий // Искусство программирования = The Art of Computer Programming. — 3-е изд. — М.: «Вильямс», 2007. — Т. 2. Получисленные алгоритмы. — С. 129—130. — 832 с. — ISBN 5-8459-0081-6 (русс.) ISBN 0-201-89684-2 (англ.).
- ↑ Donald E. Knuth. The Art of Computer Programming. — 3rd ed. — Boston: Addison-Wesley, 1998. — Т. 2. Seminumerical Algorithms.
- ↑ William H. Press, Saul A. Teukolsky, William T. Vetterling, Brian P. Flannery. Numerical Recipes in C: The Art of Scientific Computing. — 2nd ed. — Cambridge University Press, 1992. — P. 277. — ISBN 0-521-43108-5.
Дополнительная литература
- М. Максимов. Случайны ли случайные числа? — Журнал «Наука и жизнь», № 10, 1986.
Ссылки
- RANDU random number generator fails 3D+ spectral tests Архивная копия от 19 ноября 2020 на Wayback Machine