rand ?

Mates xmates
Středa Březen 17 11:54:20 CET 2004


 >nevideli jste nekdo nebo nevite jak v asm51 naprogramvat rutinu ktera
by
 >generovala nahodny byte ?

Bezne se pouzivaji dva zakladni typy algoritmu gen. nahodnych
cisel (pardon, pseudonahodnych), ktere ke sve cinnosti nepotrebuji
vstupni nah. velicinu. Oba dva algoritmy jsou samozrejme
deterministicke, tzn. lze pri znalosti algoritmu a predchoziho
vystupu urcit nasledujici vystup, nebo jinak, pokud dva stejne
generatory generuji v danem cyklu stejny vystup, bude v nasledujicim
cyklu jejich vystup opet stejny. Generatory produkuji pseudonahodne
posloupnosti (PNP), tzn., ze oba dva generatory maji urcitou periodu,
po ktere se zacne vystupni posloupnost opakovat. Pred
vlastni implementaci se musite rozhodnout, jak dlouhou
periodu bude Vase aplikace potrebovat, a kolik bitu bude
mit vystupni slovo v kazdem generujicim cyklu.

A) Generatory s posuvnymi registry
Tato trida generatoru pracuje nad ser. posuvnym registrem(y).
Nejznamnejsi varianta je ta, co popsal p. J. Hanzal. Pokud
mate registr delky n a pro operaci XOR vyberete vhodne
bity, dostanete generator PNP o nejvetsi delce (2^n)-1 (jestlize
na zacatku registr nenaplnite nulou ;-). Napr. pro reg.
8 bitu to je 255 hodnot, pro reg. 16 bitu 65535 atd.
Tento typ generatoru se hodi pro hardwarovou implementaci,
softwarova implementace je pro dlouhe registry ponekud
komplikovanejsi, nastesti '51 vladne Parity Flagem, takze
to nebude tak zle.
Generator je vhodny pro tvorbu bitove PNP. Pri vytvareni
vicebitovych slov (beru vice bitu z pos. registru, v nejhorsim
pripade napr. jeho dolni cast nebo cely registr) muze
nekdy vadit vzajemna bitova zavislost mezi sousednimi
generovanymi slovy. Pro nahodne blikani se zarovkou to
nevadi, v opacnem pripade se da vhodnou modifikaci
algoritmu zavislost minimalizovat.

B) Kongruentni (nasobici) generatory
Toto jsou velice oblibene generatory nahodnych cisel. Muzete
je najit v primitivni podobe ve starych dobrych 8-bitovych
pocitacich, stejne tak jako v prekladacich na PC (C, Pascal, ...).
Generatory pracuji na principu
            A(n+1) = A(n) * k + 1
A(n+1) je nasledujici vyst. slovo zastrihle na bit. sirku A(n)
A(n) je soucasne vyst. slovo
1 je jednicka (ne 'el')
a k je magicke cislo - nasobici konstanta.
Volbou magickeho cisla se da na tomto generatoru hodne
zkazit. Voli se cislo vetsi nez 2^(n-1), kde n je
pocet bitu pro uschovani A, a nejlepe prvocislo.
Generator je vhodny pro tvorbu slov o vetsim poctu
bitu, snadno se softwarove implementuje. V '51
bude implementace jednoducha (ma instrukci nasobeni)
pro k < 256 a sirku slova A 8 nebo 16 bitu. Pro vetsi
hodnoty implementace znacne narusta.

Uvest kody treba pro '51 nemohu - nemam je tady
na pocitaci a sypat z rukavu to nechci, kdyz
uz je mam jednou napsane.
Proto doporucuji bud hledat na Internetu
napr. pod "Pseudo Random Generator", nebo,
pokud bude zajem, mohu napsat druhy dil tohoto
mailu i s kody, ktere nalovim doma na disku.

                                 Zdravi Mates






Další informace o konferenci Hw-list