RANDU

RANDU
Распределение в трёхмерном пространстве 100 000 точек, полученных алгоритмом RANDU. Можно видеть, что точки расположены на 15 плоскостях.

RANDU — печально известный линейный конгруэнтный генератор псевдослучайных чисел, вошедший в употребление в 1960-х. Он определяется рекуррентным соотношением:

V_{j+1} \equiv (65539 V_j) \mod 2^{31}\,

где V_0 нечётное.

Псевдослучайные числа вычисляются следующим образом:

X_{j} \equiv V_{j} / 2^{31}\,

Популярно мнение, что данный алгоритм — один из наименее продуманных генераторов псевдослучайных чисел среди когда-либо предложенных. Так, он не проходит спектральный тест при количестве измерений, превышающем 2.

Основанием для выбора параметров генератора послужило то, что в рамках целочисленной 32-битной машинной арифметики операции по модулю 2^{31}, в частности, умножение произвольного числа на 65539=2^{16}+3, выполняются эффективно. В то же время, такой выбор обладает и принципиальным недостатком. Рассмотрим следующее выражение (будем полагать, что все операции выполняются по модулю 2^{31}):

x_{k+2}=(2^{16}+3) x_{k+1}=(2^{16}+3 )^2 x_{k}\,

откуда, раскрыв квадратичный сомножитель, получаем:

x_{k+2}=(2^{32}+6 \cdot2^{16} +9 )x_{k}=[6 \cdot (2^{16}+3)-9]x_{k}\,

что, в свою очередь, показывает наличие линейной зависимости (а следовательно, и полной корреляции) между тремя соседними элементами последовательности:

x_{k+2}=6x_{k+1}-9x_{k}\,

Как следствие корреляции, точки в трёхмерном пространстве, координаты которых получены по данному алгоритму, располагаются на сравнительно небольшом количестве плоскостей (в приведённом примере — на 15 плоскостях).[1]

Пример

Пример псевдослучайной последовательности, порождаемой алгоритмом RANDU при начальном значении V_0=1:

            1
        65539
       393225
      1769499
      7077969
     26542323
     95552217
    334432395
   1146624417
   1722371299
     14608041
          ...
    134633675
   1893599841
   1559961379
    907304297
   2141591611
    388843697
    238606867
     79531577
    477211307
            1

Цитаты

Его истинное название — RANDU (похоже на «random» — «случайный» — Прим. ред.), и этого достаточно, чтобы вызвать испуг в глазах и спазмы в желудке у многих учёных, специализирующихся на компьютерах![2]

Один из нас вспоминает, что получил однажды графическое изображение «случайной» последовательности, состоящее всего из 11 плоскостей. В ответ на это консультант вычислительного центра по программированию заявил, что генератор случайных чисел использовался неверно: «Мы гарантируем, что каждое число случайно само по себе, но не гарантируем того же для большего их количества». Попробуйте такое понять.

Примечания

  1. George Marsaglia. Random Numbers Fall Mainly in the Planes // Proc National Academy of Sciences : журнал. — сентябрь 1968. — Т. 61. — № 1. — С. 25—28.
  2. Дональд Кнут. Глава 3.3. Спектральный критерий // Искусство программирования = The Art of Computer Programming. — 3-е изд. — М.: «Вильямс», 2007. — Т. 2. Получисленные алгоритмы. — С. 129—130. — 832 с. — ISBN 5-8459-0081-6 (русс.) ISBN 0-201-89684-2 (англ.)
  3. Donald E. Knuth. The Art of Computer Programming. — 3rd ed. — Boston: Addison-Wesley, 1998. — Т. 2. Seminumerical Algorithms.
  4. 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

Wikimedia Foundation. 2010.

Игры ⚽ Поможем сделать НИР

Полезное


Смотреть что такое "RANDU" в других словарях:

  • RANDU — is an infamous linear congruential pseudorandom number generator which has been used since the 1960s. It is defined by the recurrence::V {j+1} equiv (65539 V j) mod 2^{31},with V 0 odd.Pseudo random numbers are calculated as::X {j} equiv V {j} /… …   Wikipedia

  • RANDU — est le nom d un générateur congruentiel linéaire introduit dans les années 1960, sur des machines IBM System/370 ou d’autres machines 32 bits. Il est très impopulaire car il possède de nombreux biais auxquels ont dû faire face les personnes qui l …   Wikipédia en Français

  • Randu — Original name in latin Randu Name in other language Randu State code ID Continent/City Asia/Jakarta longitude 8.1197 latitude 111.7935 altitude 96 Population 0 Date 2012 06 07 …   Cities with a population over 1000 database

  • randu — raita   …   Suomen slangisanakirjaa

  • Holiday House Randu Pļavas — (Салацгрива,Латвия) Категория отеля: Адрес: Pērnavas iela 33d, Салацгрив …   Каталог отелей

  • randuiti — ×randùiti, ùja, ùjo žr. randavoti 1: Šitie gaspadoriai, katarie randùjo žemę nuo grafo, tai ėmė parabkų slūžytie Aps …   Dictionary of the Lithuanian Language

  • Spektraltest — Der Spektraltest ist eine Methode, mit der überprüft werden kann, ob gegebene Zufallszahlen tatsächlich stochastisch voneinander unabhängig sind, oder ob das Gegenteil der Fall ist, d. h. bereits „gewürfelte“ Werte die folgenden Werte… …   Deutsch Wikipedia

  • Kassandra — Este artículo o sección necesita una revisión de ortografía y gramática. Puedes colaborar editándolo (lee aquí sugerencias para mejorar tu ortografía). Cuando se haya corregido, borra este aviso por favor …   Wikipedia Español

  • rasti — 1 ràsti, rañda, rãdo tr. 1. SD172, H, R, K ieškant aptikti, užeiti ką pamestą, paslėptą, paliktą: Paveizdėk, ir rasì Grv. Dabar eisme pažiūrėt, gal da ràsme Erž. Ilgai anie ieškojo jo ir visa negalėjo ràsti Lz. Kur anlįs, ir ràst negalėsi… …   Dictionary of the Lithuanian Language

  • randas — 1 randas sm. (3) 1. SD39,365, Q455, H, R, M2354, Sut, K, M, DŽ užgijusios žaizdos žymė, retys: Ant kaktos randas nuo įspyrimo kumelio J. Randas paliko, kai išgijo, kur buvo įkirsta Kp. Jeigu ir nugydysi, bus randas Pc. Jis pargrįžta iš karo… …   Dictionary of the Lithuanian Language


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»