RANDU
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í
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]
Reference
V tomto článku byl použit překlad textu z článku RANDU na anglické Wikipedii.
- 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)