Obsah / Utility / RANDOM / Výpočet náhodného čísla
Zdrojový kód: INCLUDE\UTIL\RANDOM.INC, UTIL\RANDOM.ASM
Výpočet náhodného čísla
|
Algoritmus výpočtu náhodného čísla je převzat z interpreteru BASIC firmy Microsoft a je popsán v Knowledgebase Q28150. Základem výpočtu je vzorec "seed = seed * coeff1 + coeff2". Nejčastěji používanými hodnotami koeficientů coeff1 / coeff2 jsou 214013 / 2531011, tyto hodnoty jsou i používány v Litosu. Další možné hodnoty koeficientů jsou 17405 / 10395331, 214013 / 13737667 a 214013 / 10395331.
|
K výpočtu nové hodnoty generátoru náhody je použit "částečně 64-bitový" výpočet, který je poměrně rychlý a přitom zajišťuje značně vyšší rozsah náhodnosti než klasický výpočet s 32-bitovým číslem.
Při výpočtu pomocí makra RANDNEXT je do registru EAX připraven první koeficient RNDCOEFF1 (pro násobení). Tímto koeficientem je vynásobeno nižší dvojslovo generátoru náhody, výsledek násobení se uloží do registrů EDX:EAX. K nižšímu dvojslovu výsledku je přičten druhý koeficient, RNDCOEFF2 a přenos součtu je přičten k vyššímu dvojslovu výsledku spolu s vyšším dvojslovem generátoru náhody. Dvojslova výsledku jsou uložena zaměněná, tj. vyšší dvojslovo je uloženo do nižšího dvojslova generátoru náhody a nižší dvojslovo do vyššího.
Obsah / Utility / RANDOM / Výpočet náhodného čísla