
Pseudo-slučajni brojevi su bitni za mnoge računalne aplikacije, kao što su igre i sigurnost. U igrama, slučajni brojevi pružaju nepredvidive elemente na koje igrač može odgovoriti, kao što je izbjegavanje slučajnog metka ili crtanje kartice s vrha palube.
U računalnoj sigurnosti pseudo-slučajnost je važna u algoritmima šifriranja, koji stvaraju kodove koji se ne smiju predvidjeti ili pogoditi.
Što je PRNG?
Generator pseudo-slučajnih brojeva, ili PRNG, je bilo koji program ili funkcija, koji koristi matematiku za simulaciju slučajnosti. Također se može nazvati DRNG (digitalni generator slučajnih brojeva) ili DRBG (deterministički generator slučajnih brojeva).
Matematika ponekad može biti složena, ali općenito, korištenje PRNG-a zahtijeva samo dva koraka:
- Dajte PRNG proizvoljnim sjemenom.
- Zatražite sljedeći slučajni broj.
Vrijednost sjemena je "polazna točka" za stvaranje slučajnih brojeva. Vrijednost se koristi pri izračunavanju brojeva. Ako se vrijednost sjemena promijeni, generirani brojevi se također mijenjaju, a pojedinačna vrijednost sjemena uvijek proizvodi iste brojeve. Iz tog razloga, brojevi nisu stvarno slučajni, jer se prava slučajnost nikada nije mogla ponovno stvoriti.
Trenutno vrijeme se često koristi kao jedinstvena vrijednost sjemena. Na primjer, ako je to 5. ožujka 2018. u 17:03 i 7, 01324 sekundi UTC, može se izraziti kao cijeli broj. To točno vrijeme se nikada neće ponoviti, pa će PRNG s tim sjemenom proizvesti jedinstveni skup slučajnih brojeva.
Napomena: može biti korisno reproducirati slučajno generirani slijed. U akademskim aplikacijama može se generirati masivan slijed slučajnih vrijednosti za simulaciju, a zatim se reproducira točno za detaljniju analizu kasnije. Kao drugi primjer, u računalnim igrama, ako igrač učita spremljenu igru, bilo koji "slučajni" događaj može biti isti kao da igra nikada nije prestala. Na taj način, igrač ne može ponovno učitati istu igru kako bi pokušao bolje sreće.
Kako generirati pseudo-slučajni broj
Slijedi nekoliko načina na koje možete stvoriti pseudo-slučajan broj u uobičajenim programima i programskim jezicima.
Windows Command Prompt
Na Windows naredbenom retku, ili u batch datoteci, posebna varijabla okruženja % RANDOM% proizvodi pseudoslučajni broj između 0 i 32767, zasađen s vremenom koje je pokrenuo naredbeni redak.
echo "Dakle% RANDOM%!"
"Dakle, 27525!"
Da biste stvorili skupnu datoteku koja generira slučajni broj između 1 i 100:
copy con sorandom.bat echo off set / myrand =% RANDOM% * 100/32768 + 1 echo Broj na koji sam mislio bio je% myrand%. Jesi li dobro shvatio?
Pritisnite Ctrl + Z i Enter da biste spremili skupnu datoteku. Zatim izvršite datoteku:
sorandom
Broj na koji sam mislio bio je 91. Jeste li to dobro shvatili?
Windows PowerShell
Get-Random cmdlet generira slučajni broj između 0 i 2, 147, 483, 647 (maksimalna vrijednost nepotpisanog 32-bitnog cjelobrojnog broja).
Get-ovoj
1333190525
Cmdlet traje nekoliko opcija, kao što su minimalna i maksimalna vrijednost. Vrijednosti su zaokružene prema dolje, tako da za generiranje broja između 1 i 100 postavite maksimum na 101:
Get-Random -Minimum 1 -Maximum 101
99
Microsoft Excel
U Excelovoj proračunskoj tablici formula = RAND () generirat će slučajni broj između 0 i 1. Na primjer, ako označite ćeliju i unesete = RAND (), ćelija će sadržavati broj koji će se mijenjati svaki put kada se list ponovno -calculated.

Ova metoda radi i u drugim aplikacijama za proračunske tablice, uključujući LibreOffice Calc i Google tablice.
U programskim jezicima
Većina programskih jezika ima svoje PRNG funkcije. Evo nekoliko uobičajenih primjera:
C
U C programskom jeziku, PRNG funkcije su definirane u standardnoj knjižnici, stdlib . Uobičajen način za sijanje slučajnog generatora je funkcija time (), deklarirana u time.h. Generirani broj pada između 0 i konstante RAND_MAX, cijeli sustav koji je zajamčen biti najmanje 32767.
#include #include #include void main () {srand (vrijeme (NULL)); / * sjeme generator * / int rand1 = rand (); / * pseudoslovni cijeli broj između 0 i RAND_MAX * / printf ("Slučajni broj između 0 i% d:% d \ _", RAND_MAX, (int) rand1); / * Ili, unutar određenog raspona: * / int min = 0; int max = 100; float rand2 = (float) rand () * max / RAND_MAX + 1; int round = (int) rand2; printf ("Slučajni broj između% d i% d:% d (% f)", min, max, round, rand2); povratak; }
Izlaz:
Nasumični broj između 0 i 2147483647: 1789080047 Slučajni broj između 0 i 100: 74 (74.369179)
C ++
U C ++:
#include #include #include int main () {srand (vrijeme (NULL)); std :: cout << "Slučajni broj između 0 i" << RAND_MAX << ":" << rand () << "" "" Slučajni broj između 1 i 100: "<< (rand ()% 100) + 1 << std :: endl; return 0; }
Izlaz:
Slučajni broj između 0 i 2147483647: 126569208 Slučajni broj između 1 i 100: 9
Python 3
Slučajni modul u Pythonu nudi različite funkcije za generiranje slučajnih brojeva. U ovom primjeru koristimo tri različite metode za pronalaženje slučajnog broja u rasponu.
import nasumično iz datetime import datetime random.seed (datetime.now ()) print ("Slučajni broj u rasponu [0, 1):", random.random ()) # Unutar raspona. Sve to čini istu stvar: print ("slučajni broj između 1 i 100:", okrugli (random.random () * 100) + 1) print ("slučajni broj između 1 i 100:", random.randrange (1, 101)) print ("Slučajni broj između 1 i 100:", random.randint (1, 100))
Izlaz:
Slučajni broj u rasponu [0, 1): 0.05137418896158319 Slučajni broj između 1 i 100: 27 Slučajni broj između 1 i 100: 80 Slučajni broj između 1 i 100: 80
Perl 5
Perl:
srand (vrijeme); # promjene jednom u sekundi ispis "Slučajni broj u rasponu [0, 1):", rand (), "\ t print "Slučajni broj u rasponu [1, 100]:", int (rand (101)), "\ t
Izlaz:
Slučajni broj u rasponu [0, 1): 0, 691379946963028 Slučajni broj u rasponu [0, 100]: 82
JavaScript
console.log ("Slučajni broj u rasponu [0, 1):" + Math.random ()); console.log ("Slučajni broj u rasponu [1, 100]:" + Math.floor (Math.random () * 101));
Pogledajte izlaz u konzoli JavaScripta web-preglednika (na primjer, u Firefoxu pritisnite Ctrl + Shift + K ):
Slučajni broj u rasponu [0, 1): 0, 305008216755414 Slučajni broj u rasponu [1, 100]: 8
Napomena: Funkcija Math.random () nije moguće sijati u JavaScriptu. Ako trebate robustan PRNG u JavaScriptu, provjerite bolje slučajne brojeve za JavaScript na GitHubu.
Primjer PRNG: JavaScript widget
Pomoću widgeta u nastavku možete sijati PRNG i koristiti ga za generiranje slučajnih brojeva.
Svaki put kada generirate slučajni broj iz vašeg zadanog sjemena, njegov pomak povećava se za 1. Prvi broj generiran iz sjemena pomiče nulu, drugi ima pomak 1, itd. Generator uvijek proizvodi isti broj za određeno sjeme i pomak,
Unesite sve što želite u polje da biste stvorili jedinstveno sjeme.
Pomoću gumba Generiraj možete dobiti sljedeći slučajni broj pomoću tog sjemena i povećati pomak.
Pomoću gumba Reset resetirajte pomak na nulu.
broj generiran iz sjemena :
Poništi pomak sjemena (trenutno 0 )
Ovaj widget koristi otvorene izvorne PRNG skripte Johannes Baagøe, Alea.js i Mash.js.
Računalna sigurnost, programiranje, softverski uvjeti