Posted By: Drs (Fortran je muj kamarad) on 'CZprogram'
Title:     Re: random
Date:      Tue Feb 25 15:31:00 2003

> > No, asi po kazdem pouziti random() ......... Nebo co si predstavujes pod 
> > pojmem "opravdu nahodna cisla"?
> 
> Obvykle se specifikuje nejaka baterie testu, jestli takto vygenerovan cisla 
> splnuji podminku 'nahodnosti'. 

O nahodnosti "nahodnych generatoru" uz se toho napsalo ...

Nahodna cisla na pocitaci v podstate nevygenerujes.
Jako pomerne solidni test, pri kterem selhava vetsina nahodnych generatoru, je 
generovani dvojic (trojic) nahodnych cisel a jejich vynaseni na plochu (do 
prostoru) jako souradnice. Pri velkem (hodne velkem) mnozstvi takto 
vygenerovanych bodu nejsou rovnomerne rozprostreny, ale shluhuji se, obvykle 
do primek nebo rovin. 

Vsechny generatory na klasickem PC negeneruji nahodne cislo, ale postupuji 
nejakou posloupnosti. Posloupnost je zkonstruovana tak, aby se velice dlouho 
neopakovala. 
Vetsina techto pseudonahodnych posloupnosti se nachazi ve tvaru
R_{i+1} = modulo(C1*R_{i} + C2, M)
Zde je vsechno celociselne a generuje to "nahodna" cisla v rozsahu <0,M). 
Tento algoritmus byva vetsinou prepsan na hledani necelociselneho nahodneho 
cisla na intervalu <0,1), coz snadno ziskame jako R_{i+1}/M.
Zbyva uz jen urcit vhodne celociselne konstanty C1 a C2, dale cislo pro 
modulo M a take pocatecni hodnotu I_{0} tak, aby se posloupnost zacala 
opakovat po co nejvetsim poctu volani. Toto je samozrejme nejvetsi veda :-)) 

Techto posloupnosti existuje cela rada, ja uvedu jen jeden priklad, a sice 
posloupnost, kterou pouzivala ve svych generatorech spolecnost IBM (netusim, 
jestli se jeste pouziva ...)
V ni se volila konstanta C1 = 16807, C2 trivialne = 0 a nakonec cislo pro 
modulo M = 2^31-1
Pocatecni hodnota je napr I_{0} = 1 (ta se nastavuje nejakou inicializaci toho 
generatoru, obvykle v zavislosti na systemovem casu a podobne). Oproti 
standardnimu generatoru v C nebo Fortranu tato posloupnost neprinese zadne 
vylepseni, protoze ten pracuje na stejnem principu, jen s volbou jinych 
konstant. 

Nakonec jen pripomenu, ze tyto posloupnosti generuji pseudonahodna, nikoliv 
nahodna cisla. Na hledani skutecne nahodnych cisel se ve vetsine pripadu 
pouzivaji chytre krabicky, ktere generuji skutecne nahodna cisla odvozena z 
nejakeho kvantoveho efektu. Jejich ceny vsak jsou pomerne vysoke. 

> Korusef[ Libor Dener]
>                    (-: CauCau :-)

                                          DrS
------------------------------------------------------------------
To jen aby rec nestala ...

Search the boards