Obsah / Utility / RANDOM / Proměnná generátoru náhody
Zdrojový kód: INCLUDE\UTIL\RANDOM.INC, UTIL\RANDOM.ASM
Proměnná generátoru náhody
|
Pseudogenerátor náhody potřebuje ke své funkci proměnnou uchovávající jeho aktuální stav, tzv. "krmení". Litos používá 64-bitovou proměnnou RandSeed, která má dostatečně dlouhou dobu pro vyčerpání všech hodnot a zabraňuje možnosti předpovězení příští hodnoty.
Proměnnou RandSeed není potřeba uzamykat proti souběhu procesorů. Jedná se o náhodné číslo a proto neúplné provedení některé operace není na závadu.
|
Výchozí hodnota generátoru náhody RandSeed je inicializována během startu systému hodnotou čítače systémových hodin (DWORD na adrese 0040:006ch). Tím je zabráněno opakování stejných posloupností čísel při každém startu systému.
|
Pro zvýšení náhodnosti je proměnná RandSeed "rozhazována" náhodnými ději v systému, jako je příchod znaku z klávesnice nebo pohyb myší. K tomu slouží makra RNDSHIFT (posun generátoru náhody o 1) a RNDSHIFTADD (posun generátoru náhody o dané číslo, které je parametrem makra). Není na závadu, že je rozhazováno pouze nižší dvojslovo generátoru.
Obsah / Utility / RANDOM / Proměnná generátoru náhody