
Pseudonáhodná čísla jsou nezbytná pro mnoho počítačových aplikací, jako jsou hry a bezpečnost. Ve hrách poskytují náhodná čísla nepředvídatelné prvky, na které může hráč reagovat, jako například vyhýbání se náhodnému náboji nebo kreslení karty z horní části balíčku.
V počítačové bezpečnosti je pseudonáhodnost důležitá v šifrovacích algoritmech, které vytvářejí kódy, které nelze předvídat ani odhadovat.
Co je to PRNG?
Generátor pseudonáhodných čísel nebo PRNG je libovolný program nebo funkce, která používá matematiku k simulaci náhodnosti. To může také být voláno DRNG (digitální generátor náhodných čísel), nebo DRBG (deterministický generátor náhodných bitů).
Matematika může být někdy složitá, ale použití PRNG vyžaduje pouze dva kroky:
- Poskytněte PRNG libovolnému semenu.
- Požádejte o další náhodné číslo.
Hodnota osiva je "výchozí bod" pro vytváření náhodných čísel. Hodnota se používá při výpočtu čísel. Pokud se hodnota semena změní, generovaná čísla se také změní a jedna hodnota osiva bude vždy produkovat stejná čísla. Z tohoto důvodu nejsou čísla skutečně náhodná, protože skutečná náhodnost nemůže být nikdy znovu vytvořena.
Aktuální čas je často používán jako jedinečná hodnota osiva. Například, jestliže to je 5. března 2018, v 5:03 PM a 7, 01324 sekund UTC, to může být vyjádřeno jako celé číslo. Přesný čas se již nikdy neobjeví, takže PRNG s tímto semenem by mělo vytvořit jedinečnou sadu náhodných čísel.
Poznámka: Může být užitečné reprodukovat náhodně generovanou sekvenci. V akademických aplikacích může být pro simulaci generována masivní posloupnost náhodných hodnot, která pak bude reprodukována přesně pro pozdější podrobnější analýzu. Jako další příklad, v počítačových hrách, jestliže hráč načte uloženou hru, nějaké “náhodné” události mohou být stejné jako jestliže hra nikdy se zastavila. Tímto způsobem hráč nemůže opakovaně načítat stejnou hru, aby se pokusil o větší štěstí.
Jak generovat pseudonáhodné číslo
Níže jsou uvedeny některé způsoby, jak vytvořit pseudonáhodné číslo ve společných programech a programovacích jazycích.
Příkazový řádek systému Windows
Proměnná % RANDOM% v příkazovém řádku systému Windows nebo v dávkovém souboru vytvoří pseudo-náhodné číslo mezi 0 a 32767, načtené s časem spuštění příkazového řádku.
echo "So% RANDOM%!"
"Takže 27525!"
Vytvoření dávkového souboru, který generuje náhodné číslo mezi 1 a 100:
kopírovat con sorandom.bat echo off set / a myrand =% RANDOM% * 100/32768 + 1 echo Číslo, na které jsem myslel, bylo% myrand%. Dostali jste to správně?
Stiskněte Ctrl + Z a Enter pro uložení dávkového souboru. Poté spusťte soubor:
tak náhodný
Číslo, na které jsem myslel, bylo 91. Dostali jste to správně?
Windows PowerShell
Rutina Get-Random generuje náhodné číslo mezi 0 a 2 147 483 647 (maximální hodnota 32bitového celého čísla bez znaménka).
Get-Random
1333190525
Rutina cmdlet má řadu možností, například minimální a maximální hodnotu. Hodnoty jsou zaokrouhleny dolů, aby bylo možné vygenerovat číslo mezi 1 a 100, nastavte maximální hodnotu na 101:
Get-Random -Minimum 1 -Maximum 101
99
Microsoft Excel
V tabulce aplikace Excel vygeneruje vzorec = RAND () náhodné číslo mezi 0 a 1. Pokud například zvýrazníte buňku a zadáte = RAND (), buňka bude obsahovat číslo, které se změní, kdykoli je list znovu vypočteno.

Tato metoda funguje také v jiných tabulkových aplikacích, včetně LibreOffice Calc a Google Sheets.
V programovacích jazycích
Většina programovacích jazyků má své vlastní funkce PRNG. Zde jsou některé běžné příklady:
C
V programovacím jazyce C jsou funkce PRNG definovány ve standardní knihovně stdlib . Běžným způsobem osazení generátoru náhodných hodnot je funkce time () deklarovaná v time.h. Generované číslo spadá mezi 0 a konstantu RAND_MAX, celočíselné číslo specifické pro systém garantované na hodnotu nejméně 32767.
#include #include #include void main () {srand (time (NULL)); / * seed generátor * / int rand1 = rand (); / * pseudonáhodné celé číslo mezi 0 a RAND_MAX * / printf ("Náhodné číslo mezi 0 a% d:% d n", RAND_MAX, (int) rand1); / * Nebo, ve specifickém rozsahu: * / int min = 0; int max = 100; float rand2 = (float) rand () * max / RAND_MAX + 1; int round = (int) rand2; printf ("Náhodné číslo mezi% d a% d:% d (% f) n", min, max, kolo, rand2); vrátit se; }
Výstup:
Náhodné číslo mezi 0 a 2147483647: 1789080047 Náhodné číslo mezi 0 a 100: 74 (74.369179)
C ++
V jazyce C ++:
#include #include #include int main () {srand (time (NULL)); std :: cout << "Náhodné číslo mezi 0 a" << RAND_MAX << ":" << rand () << "n" << "Náhodné číslo mezi 1 a 100:" << (rand ()% 100) + 1 << std :: endl; návrat 0; }
Výstup:
Náhodné číslo mezi 0 a 2147483647: 126569208 Náhodné číslo mezi 1 a 100: 9
Python 3
Náhodný modul v Pythonu nabízí řadu funkcí pro generování náhodných čísel. V tomto příkladu používáme tři různé metody pro nalezení náhodného celého čísla v rozsahu.
import náhodně z datetime import datetime random.seed (datetime.now ()) print ("Náhodné číslo v rozsahu [0, 1):", random.random ()) # V rámci rozsahu. To vše dělají totéž: tisk ("Náhodné číslo mezi 1 a 100:", kolo (random.random () * 100) + 1) tisk ("Náhodné číslo mezi 1 a 100:", random.randrange (1, 101)) print ("Náhodné číslo mezi 1 a 100:", random.randint (1, 100))
Výstup:
Náhodné číslo v rozsahu [0, 1]: 0, 05137418896158319 Náhodné číslo mezi 1 a 100: 27 Náhodné číslo mezi 1 a 100: 80 Náhodné číslo mezi 1 a 100: 80
Perl 5
V Perlu:
srand (čas); # změní se jednou za sekundu tisk "Náhodné číslo v rozsahu [0, 1]:", rand (), "n"; print "Náhodné číslo v rozsahu [1, 100]:", int (rand (101)), "n";
Výstup:
Náhodné číslo v rozsahu [0, 1]: 0, 691379946963028 Náhodné číslo v rozsahu [0, 100]: 82
JavaScript
console.log ("Náhodné číslo v rozsahu [0, 1]:" + Math.random ()); console.log ("Náhodné číslo v rozsahu [1 100]:" + Math.floor (Math.random () * 101));
Zobrazení výstupu v konzole JavaScriptu webového prohlížeče (například v aplikaci Firefox stiskněte klávesy Ctrl + Shift + K ):
Náhodné číslo v rozsahu [0, 1]: 0, 305008216755414 Náhodné číslo v rozsahu [1 100]: 8
Poznámka: Funkci Math.random () není možné v JavaScriptu zavést. Pokud potřebujete robustní PRNG v JavaScriptu, podívejte se na lepší náhodná čísla pro JavaScript na GitHub.
Příklad PRNG: JavaScript widget
Pomocí níže uvedeného widgetu můžete načíst PRNG a použít jej k vygenerování náhodných čísel.
Pokaždé, když vygenerujete náhodné číslo ze zadaného osiva, jeho posun se zvýší o 1. První číslo vygenerované ze semene má posunutí nuly, druhý má odsazení 1 atd. Generátor vždy produkuje stejné číslo pro dané osivo a posunutí .
Zadejte cokoliv, co chcete do pole vytvořit jedinečné semeno.
Použijte tlačítko Generovat pro získání dalšího náhodného čísla pomocí tohoto semene a zvýšení posunu.
Tlačítko Reset slouží k resetování posunutí na nulu.
generované ze semen :
Obnovit posun osiva (momentálně 0 )
Tento widget používá Johannes Baagøe je open source PRNG skripty, Alea.js a Mash.js.
Bezpečnost počítačů, programování, softwarové podmínky