RANDU - RANDU

Үшөлшемді сюжет RANDU көмегімен жасалған 100000 мәннен. Әр нүкте қатарынан 3 жалған кездейсоқ мәнді білдіреді. Ұпайлардың 15-ке түсетіні анық көрінеді екі өлшемді ұшақтар.

RANDU[1] Бұл сызықтық конгруденциялы жалған кездейсоқ сандар генераторы (LCG) Парк-Миллер типі, ол 1960 жылдардан бері қолданылып келеді.[2] Ол анықталады қайталану:

бастапқы тұқым нөмірімен, ретінде тақ сан. Ол жалған кездейсоқтықты тудырады бүтін сандар қайсысы біркелкі бөлінген аралықта [1, 231 − 1], бірақ практикалық қосымшаларда көбінесе псевдокандалыға түсіріледі ұтымды аралықта (0, 1), формула бойынша:

.

IBM's RANDU кеңінен ойластырылмаған кездейсоқ сандардың генераторларының бірі болып саналады,[3] және «шынымен қорқынышты» деп сипатталған Дональд Кнут.[4] Бұл орындалмайды спектрлік тест 2-ден үлкен өлшемдер үшін нашар, және барлық бүтін нәтижелер тақ болады. Алайда бір реттік дәлдікке (32 бит, 24 бит мантисса) өзгермелі нүктеге айналдырған кезде кемінде сегіз төменгі ретті разрядтар түсіп кетеді.

Осы нақты мәндерді таңдаудың себебі 32-биттік бүтін сөздің өлшемімен, мод 2-нің арифметикасы31 және есептеулерді кейбір компьютерлік жабдықтардың арнайы мүмкіндіктерін пайдаланып, тез жасауға болатын еді.

Көбейткіш пен модульге арналған есептер

Жалпы, LCG модулі 2 болған кезде31 нүктелерді шығару үшін қолданылады (хк, xk + 1, xk + 2) 3 өлшемді кеңістікте нүктелер параллель жазықтыққа қарағанда 2 344-тен аспайды,[5] LCG-ге сәйкес келмейтін нәтиже Монте-Карлоны модельдеу. Мультипликаторды таңдау ұшақтар санын анықтайды. 65539 және 2 модулі көбейткішінің мәндеріне есептер шығару31 RANDU үшін таңдалған, келесі есептеулерді қарастырыңыз, мұнда әр тоқсанды 2-ші модульмен қабылдау керек31. Рекурсивті қатынасты келесідей жазудан бастаңыз:

бұл квадраттық факторды кеңейткеннен кейін:

өйткені 232 мод 231 = 0

және үш нүкте арасындағы корреляцияны келесідей көрсетуге мүмкіндік береді:

Осы корреляция нәтижесінде әрбір нүкте 2 параллель жазықтықтар жиынтығының біріне жатады31 бөлек, оның 15-і 2-ні қиып өтеді31 x 231 x 231 нүктелері бар текше. 1970 жылдардың басында RANDU-ны кеңінен қолдану нәтижесінде көптеген нәтижелер күдікті болып көрінеді.[6]

Бұл тәртіпті бұзушылық 1963 жылы анықталған[7] 36-биттік компьютерде және мұқият толықтырылған[түсіндіру қажет ] 32-битте IBM System / 360. Ол 1990 жылдардың басында кеңінен тазартылды деп есептелді[8] дегенмен 1999 жылдың соңында оны қолданатын FORTRAN компиляторлары болды.[1]

Үлгі шығару

Бастапқы тұқым үшін RANDU шығару кезеңінің басталуы бұл:

1, 65539, 393225, 1769499, 7077969, 26542323,… (реттілік A096555 ішінде OEIS )

Әдебиеттер тізімі

  1. ^ а б Compaq Fortran тіліне арналған анықтамалық нұсқаулық (Тапсырыс нөмірі: AA-Q66SD-TK) қыркүйек 1999 (бұрынғы DIGITAL Fortran және DEC Fortran 90)
  2. ^ Entacher, Карл (маусым 2000). «Сызықтық құрылымы бар классикалық жалған кездейсоқ генераторлар жиынтығы - жетілдірілген нұсқа». Архивтелген түпнұсқа 18 қараша 2018 ж.
  3. ^ Кнут Д.Е. Компьютерлік бағдарламалау өнері, 2 том: Жартылай алгоритмдер, Екінші басылым. Аддисон-Уэсли, 1981 ж. ISBN  0-201-03822-6. 3.3.4 бөлім, б. 104. «оның RANDU атауы көптеген компьютер ғалымдарының көздері мен асқазандарына үрей тудыру үшін жеткілікті!» [Кездейсоқ емес статистикалық тестілерді кеңінен қамту.]
  4. ^ Кнут (1998), б. 188
  5. ^ Марсаглия, Джордж (1968). «Кездейсоқ сандар негізінен жазықтықта түседі». Proc. Натл. Акад. Ғылыми. АҚШ. 61 (1): 25–28. дои:10.1073 / pnas.61.1.25. PMC  285899. PMID  16591687.
  6. ^ Баспасөз, Уильям Х .; т.б. (1992). Fortran 77-дегі сандық рецепттер: ғылыми есептеу өнері (2-ші басылым). ISBN  0-521-43064-X.
  7. ^ реф. 7 http://portal.acm.org/citation.cfm?id=363827
  8. ^ Дональд Кнутпен сұхбат

Сыртқы сілтемелер