Obsah / Utility / RANDOM / Náhodné číslo v intervalu
Zdrojový kód: INCLUDE\UTIL\RANDOM.INC, UTIL\RANDOM.ASM
|
Funkce RandIntByte (RandIntChar) vygeneruje náhodné číslo "bajt bez znaménka" nebo "bajt se znaménkem" v intervalu od daného minima až po zadané maximum. Minimální hodnota intervalu je na vstupu funkce dána obsahem registru AH, maximální hodnota je dána obsahem registru AL. Číslo je generováno s využitím funkce RandMaxByte, která vygeneruje náhodné číslo v rozsahu daném rozdílem maximální a minimální hodnoty čísla. Leží-li minimální hodnota nad maximální hodnotou, vygeneruje se číslo ležící vně intervalu, není proto třeba rozlišovat interval se znaménkem a interval bez znaménka.
|
Funkce RandIntWord (RandIntShort) vygeneruje náhodné číslo "slovo bez znaménka" nebo "slovo se znaménkem" v intervalu od daného minima až po zadané maximum. Minimální hodnota intervalu je na vstupu funkce dána obsahem registru DX, maximální hodnota je dána obsahem registru AX. Číslo je generováno s využitím funkce RandMaxWord, která vygeneruje náhodné číslo v rozsahu daném rozdílem maximální a minimální hodnoty čísla. Leží-li minimální hodnota nad maximální hodnotou, vygeneruje se číslo ležící vně intervalu, není proto třeba rozlišovat interval se znaménkem a interval bez znaménka.
|
Funkce RandIntDWord (RandIntLong) vygeneruje náhodné číslo "dvojslovo bez znaménka" nebo "dvojslovo se znaménkem" v intervalu od daného minima až po zadané maximum. Minimální hodnota intervalu je na vstupu funkce dána obsahem registru EDX, maximální hodnota je dána obsahem registru EAX. Číslo je generováno s využitím funkce RandMaxDWord, která vygeneruje náhodné číslo v rozsahu daném rozdílem maximální a minimální hodnoty čísla. Leží-li minimální hodnota nad maximální hodnotou, vygeneruje se číslo ležící vně intervalu, není proto třeba rozlišovat interval se znaménkem a interval bez znaménka.
|
Funkce RandIntQWord (RandIntInt64) vygeneruje náhodné číslo "čtyřslovo bez znaménka" nebo "čtyřslovo se znaménkem" v intervalu od daného minima až po zadané maximum. Minimální hodnota intervalu je na vstupu funkce dána obsahem registrů EBX:ECX, maximální hodnota je dána obsahem registrů EDX:EAX. Číslo je generováno s využitím funkce RandMaxQWord, která vygeneruje náhodné číslo v rozsahu daném rozdílem maximální a minimální hodnoty čísla. Leží-li minimální hodnota nad maximální hodnotou, vygeneruje se číslo ležící vně intervalu, není proto třeba rozlišovat interval se znaménkem a interval bez znaménka.
|
Funkce RandIntFloat vygeneruje náhodné desetinné číslo s jednoduchou přesností v intervalu od daného minima až po zadané maximum. Minimální hodnota intervalu je na vstupu funkce dána obsahem registru koprocesoru ST1, maximální hodnota je dána obsahem registru koprocesoru ST0. Číslo je generováno s využitím funkce RandMaxFloat, která vygeneruje náhodné číslo v rozsahu daném rozdílem maximální a minimální hodnoty čísla. Nezáleží na pořadí hodnot minima a maxima, maximum může být menší než minimum.
Při generování čísla se od maxima v registru ST0 odečte minimum z registru ST1, v registru ST0 bude tedy interval pro generování čísla (může to být jak kladná tak i záporná hodnota nebo nula). Po vygenerování náhodného čísla funkcí RandMaxFloat (vygenerované číslo přitom nahradí původní hodnotu registru ST0, tj. velikost intervalu) se výsledek v registru ST0 přičte k původní minimální hodnotě v registru ST1, registr ST0 se zruší a výsledná hodnota bude novým obsahem registru ST0.
Protože funkce používá matematický koprocesor, je nutné pamatovat na uchování stavu koprocesoru v případě, že funkce je interně používána jádrem systému.
|
Funkce RandIntDouble vygeneruje náhodné desetinné číslo s dvojitou přesností v intervalu od daného minima až po zadané maximum. Minimální hodnota intervalu je na vstupu funkce dána obsahem registru koprocesoru ST1, maximální hodnota je dána obsahem registru koprocesoru ST0. Číslo je generováno s využitím funkce RandMaxDouble, která vygeneruje náhodné číslo v rozsahu daném rozdílem maximální a minimální hodnoty čísla. Nezáleží na pořadí hodnot minima a maxima, maximum může být menší než minimum.
Při generování čísla se od maxima v registru ST0 odečte minimum z registru ST1, v registru ST0 bude tedy interval pro generování čísla (může to být jak kladná tak i záporná hodnota nebo nula). Po vygenerování náhodného čísla funkcí RandMaxDouble (vygenerované číslo přitom nahradí původní hodnotu registru ST0, tj. velikost intervalu) se výsledek v registru ST0 přičte k původní minimální hodnotě v registru ST1, registr ST0 se zruší a výsledná hodnota bude novým obsahem registru ST0.
Protože funkce používá matematický koprocesor, je nutné pamatovat na uchování stavu koprocesoru v případě, že funkce je interně používána jádrem systému.
Obsah / Utility / RANDOM / Náhodné číslo v intervalu