RANDU je lineární kongruentní generátor pseudonáhodných čísel Parkova-Millerova typu, který byl používán od šedesátých let dvacátého století. Je definován rekurentní rovnicí

Pokud generovaná čísla bereme po trojicích jako souřadnice bodů, padnou do patnácti rovin, jak ukazuje tento trojrozměrný graf pro prvních sto tisíc hodnot

kde je liché. Generuje pseudonáhodná celá čísla v intervalu .

RANDU je považován za jeden z nejhorších navržených a používaných generátorů pseudonáhodných čísel. Neprojde spektrálním testem pro dimenzi větší než 2, výsledkem jsou jen lichá čísla. Přesto se používal poměrně dlouho a na „náhodnosti“ jeho výstupu je založena řada vědeckých článků z počátku sedmdesátých let, kdy byl obzvlášť v oblibě.

Motivací pro volbu parametrů bylo, že na běžných počítačích lze velice rychle provést operace modulo 231 a násobení číslem . První z nich lze realizovat vynulováním dvou nejvýznamnějších bitů 32bitového registru a druhou z nich lze realizovat jen pomocí sčítání a dvou bitových posunů, tedy aniž by bylo potřeba provádět obecné násobení.

Rychlým výpočtem ovšem výhody končí, neboť zvolené hodnoty vedou k velmi degenerované náhodnosti, jak vidíme z následujícího rozepsání rekurzivního vztahu (všechny následující výpočty probíhají modulo 231):

z čehož umocněním máme

kde zjednodušení plyne z toho, že . Vidíme tedy, jak prostý je vztah mezi třemi po sobě následujícími hodnotami:

Nedostatečnou náhodost generovaných čísel lze ukázat i obrázkem. Jak totiž ukázal v roce 1968 George Marsaglia, tak pokud generovaná čísla budeme brát po trojicích jako souřadnice bodů eukleidovského prostoru, pak všechny takto získané body padnou do pouhých patnácti rovin.[1]

ReferenceEditovat

V tomto článku byl použit překlad textu z článku RANDU na anglické Wikipedii.

  1. Marsaglia, George. Random Numbers Fall Mainly in the Planes. Proc National Academy of Sciences. 1968, s. 25–28. Dostupné online. DOI:10.1073/pnas.61.1.25. (anglicky)