
Pseudonáhodné čísla sú nevyhnutné pre mnohé počítačové aplikácie, ako sú hry a bezpečnosť. V hrách poskytujú náhodné čísla nepredvídateľné prvky, na ktoré môže hráč reagovať, ako napríklad vyhýbanie sa náhodnej guľke alebo ťahanie karty z hornej časti paluby.
V počítačovej bezpečnosti je pseudonáhodnosť dôležitá v šifrovacích algoritmoch, ktoré vytvárajú kódy, ktoré sa nesmú predpovedať alebo odhadnúť.
Čo je to PRNG?
Generátor pseudonáhodných čísel alebo PRNG je ľubovoľný program alebo funkcia, ktorá používa matematiku na simuláciu náhodnosti. Môže sa tiež nazývať DRNG (generátor digitálnych náhodných čísel) alebo DRBG (generátor deterministických náhodných bitov).
Matematika môže byť niekedy zložitá, ale vo všeobecnosti použitie PRNG vyžaduje iba dva kroky:
- Poskytnite PRNG ľubovoľnému semenu.
- Požiadajte o ďalšie náhodné číslo.
Hodnota osiva je "východiskovým bodom" pre vytváranie náhodných čísel. Hodnota sa používa pri výpočte čísel. Ak sa hodnota semena zmení, vygenerované čísla sa tiež zmenia a jediná hodnota semena vždy vytvorí rovnaké čísla. Z tohto dôvodu nie sú čísla skutočne náhodné, pretože skutočná náhodnosť sa nikdy nedá znovu vytvoriť.
Aktuálny čas sa často používa ako jedinečná hodnota osiva. Napríklad, ak je to 5. marec 2018, v čase 5:03 PM a 7, 01324 sekúnd UTC, môže byť vyjadrené ako celé číslo. Tento presný čas sa už nikdy nevyskytne, takže PRNG s týmto semenom by malo vytvoriť jedinečný súbor náhodných čísel.
Poznámka: Možnosť reprodukcie náhodne generovanej sekvencie môže byť užitočná. V akademických aplikáciách môže byť pre simuláciu vytvorená masívna postupnosť náhodných hodnôt, ktorá bude potom reprodukovaná presne pre podrobnejšiu analýzu. Ako ďalší príklad, v počítačových hrách, ak hráč načíta uloženú hru, akékoľvek "náhodné" udalosti môžu byť rovnaké, ako keby sa hra nikdy nezastavila. Týmto spôsobom hráč nemôže opakovane načítať rovnakú hru, aby sa pokúsil o šťastie.
Ako generovať pseudonáhodné číslo
Nižšie sú uvedené niektoré spôsoby, ako vytvoriť pseudonáhodné číslo v bežných programoch a programovacích jazykoch.
Príkazový riadok systému Windows
V príkazovom riadku systému Windows alebo v dávkovom súbore špeciálna premenná prostredia % RANDOM% vytvorí pseudonáhodné číslo medzi 0 a 32767, načrtnuté časom spustenia príkazového riadka.
echo "So% RANDOM%!"
"Takže 27525!"
Vytvorenie dávkového súboru, ktorý generuje náhodné číslo medzi 1 a 100:
kopírovať con sorandom.bat echo off nastaviť / myrand =% RANDOM% * 100/32768 + 1 echo Číslo, na ktoré som myslel, bolo% myrand%. Dostali ste to správne?
Stlačením Ctrl + Z a Enter uložte dávkový súbor. Potom spustite súbor:
tak náhodný
Číslo, na ktoré som myslel, bolo 91. Dostali ste to správne?
Windows PowerShell
Rutina Get-Random generuje náhodné číslo medzi 0 a 2 147 483 647 (maximálna hodnota 32-bitového celého čísla bez znamienka).
Get-Random
1333190525
Rutina cmdlet má niekoľko možností, napríklad minimálnu a maximálnu hodnotu. Hodnoty sú zaokrúhlené nadol, aby sa vygenerovalo číslo medzi 1 a 100, nastavte maximálnu hodnotu na 101:
Get-Random -Minimum 1 -Maximum 101
99
Microsoft Excel
V tabuľkovom procesore Excel vygeneruje vzorec = RAND () náhodné číslo medzi 0 a 1. Napríklad, ak zvýrazníte bunku a zadáte = RAND (), bunka bude obsahovať číslo, ktoré sa zmení vždy, keď sa list vráti. -calculated.

Táto metóda funguje aj v iných tabuľkových aplikáciách, vrátane LibreOffice Calc a Google Sheets.
V programovacích jazykoch
Väčšina programovacích jazykov má svoje vlastné funkcie PRNG. Uvádzame niekoľko bežných príkladov:
C
V programovacom jazyku C sú funkcie PRNG definované v štandardnej knižnici stdlib . Bežný spôsob, ako nasadiť náhodný generátor, je funkcia time () deklarovaná v time.h. Generované číslo spadá medzi 0 a konštantu RAND_MAX, pričom celočíselné číslo špecifické pre systém je zaručené aspoň 32767.
#include #include #include void main () {srand (time (NULL)); / * seed generátor * / int rand1 = rand (); / * pseudonáhodné celé číslo medzi 0 a RAND_MAX * / printf ("Náhodné číslo medzi 0 a% d:% d n", RAND_MAX, (int) rand1); / * Alebo v rámci špecifického rozsahu: * / int min = 0; int max = 100; float rand2 = (float) rand () * max / RAND_MAX + 1; int round = (int) rand2; printf ("Náhodné číslo medzi% d a% d:% d (% f) n", min, max, kolo, rand2); return; }
Výkon:
Náhodné číslo medzi 0 a 2147483647: 1789080047 Náhodné číslo medzi 0 a 100: 74 (74.369179)
C ++
V jazyku C ++:
#include #include #include int main () {srand (time (NULL)); std :: cout << "Náhodné číslo medzi 0 a" << RAND_MAX << ":" << rand () << "n" << "Náhodné číslo medzi 1 a 100:" << (rand ()% 100) + 1 << std :: endl; návrat 0; }
Výkon:
Náhodné číslo medzi 0 a 2147483647: 126569208 Náhodné číslo medzi 1 a 100: 9
Python 3
Náhodný modul v Pythone ponúka množstvo funkcií na generovanie náhodných čísel. V tomto príklade používame tri rôzne metódy na nájdenie náhodného čísla v rozsahu.
import náhodne z datetime import datetime random.seed (datetime.now ()) print ("Náhodné číslo v rozsahu [0, 1):", random.random ()) # V rámci rozsahu. Toto všetko robí to isté: tlač ("Náhodné číslo medzi 1 a 100:", kolo (random.random () * 100) + 1) tlač ("Náhodné číslo medzi 1 a 100:", náhodne. 101)) print ("Náhodné číslo medzi 1 a 100:", random.randint (1, 100))
Výkon:
Náhodné číslo v rozsahu [0, 1]: 0, 05137418896158319 Náhodné číslo medzi 1 a 100: 27 Náhodné číslo medzi 1 a 100: 80 Náhodné číslo medzi 1 a 100: 80
Perl
V Perle:
srand (čas); # zmeny raz za sekundu tlač "Náhodné číslo v rozsahu [0, 1]:", rand (), "n"; print "Náhodné číslo v rozsahu [1, 100]:", int (rand (101)), "n";
Výkon:
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));
Zobrazenie výstupu v konzole JavaScriptu webového prehliadača (napríklad v prehliadači Firefox stlač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: Funkciu Math.random () nie je možné nasadiť v jazyku JavaScript. Ak potrebujete robustný PRNG v JavaScript, pozrite sa na lepšie náhodné čísla pre JavaScript na GitHub.
Príklad PRNG: JavaScript widget
Pomocou miniaplikácie nižšie môžete nasadiť PRNG a použiť ho na generovanie náhodných čísel.
Zakaždým, keď vygenerujete náhodné číslo zo zadaného semena, jeho posun sa zvýši o 1. Prvé číslo vygenerované zo semena má posunutú nulu, druhý má odsadenie 1 atď.,
Zadajte čokoľvek, čo chcete do poľa vytvoriť jedinečné semeno.
Použite tlačidlo Generate (Generovať) na získanie ďalšieho náhodného čísla pomocou tohto semena a zvýšenie posunu.
Na resetovanie posunutia na nulu použite tlačidlo Reset.
generované zo semien :
Obnoviť odsadenie osiva (momentálne 0 )
Tento widget používa Johannes Baagøeho open source PRNG skripty, Alea.js a Mash.js.
Počítačová bezpečnosť, programovanie, softvérové podmienky