Mi az a pszeudo-véletlen?

A pszeudo-véletlen számokat számítógépek generálják. Nem igazán véletlenszerűek, mert ha egy számítógép megfelelően működik, semmi sem véletlenszerű. A számítógépek determinisztikus eszközök - a számítógép viselkedése teljesen megjósolható. Tehát valami kiszámíthatatlan létrehozásához a számítógépek matematikai algoritmusokat használnak olyan számok előállításához, amelyek "elég véletlenek".

A pszeudo-véletlen számok elengedhetetlenek számos számítógépes alkalmazáshoz, például játékhoz és biztonsághoz. A játékokban a véletlen számok kiszámíthatatlan elemeket biztosítanak, amiket a játékos válaszolhat, mint például egy véletlenszerű golyó elhagyása vagy egy kártya rajzolása a fedélzet tetejéről.

A számítógépes biztonságban a pszeudo-véletlenség fontos a titkosítási algoritmusokban, amelyek olyan kódokat hoznak létre, amelyeket nem szabad előre megjósolni vagy kitalálni.

Mi az a PRNG?

A pszeudo-véletlenszám-generátor vagy a PRNG minden olyan program, vagy funkció, amely matematikát használ a véletlenszerűség szimulálására. DRNG (digitális véletlenszám generátor) vagy DRBG (determinisztikus véletlen bit generátor) is lehet.

A matematika néha összetett lehet, de általában a PRNG használata csak két lépést igényel:

  1. Adja meg a PRNG-nek tetszőleges magot.
  2. Kérje meg a következő véletlen számot.

A vetőmagérték egy "kezdőpont" a véletlen számok létrehozásához. Az értéket a számok számításakor használjuk. Ha a vetőmagérték megváltozik, a generált számok is megváltoznak, és egyetlen magérték is mindig ugyanazokat a számokat eredményezi. Emiatt a számok nem igazán véletlenek, mert az igazi véletlenszerűség soha nem hozható létre újra.

Az aktuális időt gyakran egyedülálló magértékként használják. Például, ha 2018. március 5-én, 5:03-kor és 7.01324 másodpercben UTC, akkor egész számként fejezhető ki. Ez a pontos idő soha többé nem fordul elő, így a magvakkal rendelkező PRNG-nek egyedülálló véletlenszámokat kell létrehoznia.

Megjegyzés: A véletlenszerűen generált szekvencia reprodukálására alkalmas lehet. Az akadémiai alkalmazásokban a szimulációhoz hatalmas véletlenszerű értékek sorozata generálható, majd a későbbiekben pontosabb elemzésre kerül. Egy másik példa, hogy számítógépes játékokban, ha a játékos betölti a mentett játékot, bármely "véletlen" esemény ugyanaz lehet, mintha a játék soha nem állt meg. Így a játékos nem tudja ismételten újratölteni ugyanazt a játékot, hogy megpróbálja a jobb szerencsét.

Hogyan generálhat pszeudo-véletlen számot

Az alábbiakban néhány módon pszeudo-véletlen számot hozhat létre a közös programokban és programozási nyelvekben.

Windows parancssor

A Windows parancssorában, vagy egy kötegelt fájlban a % RANDOM% speciális környezeti változó 0 és 32767 között pszeudo-véletlen számot hoz létre, azzal az idővel, hogy a parancssor elindult.

 echo "So% RANDOM%!" 
 "Szóval 27525!" 

Egy kötegfájl létrehozásához, amely véletlen számot generál 1 és 100 között:

 copy con sorandom.bat echo off set / a myrand =% RANDOM% * 100/32768 + 1 visszhang A szám, amit gondolok, % myrand% volt. Igazad van? 

Nyomja meg a Ctrl + Z és az Enter billentyűt a kötegelt fájl mentéséhez. Ezután hajtsa végre a fájlt:

 véletlenszerű 
 A szám, amit gondolok, 91 volt. 

Windows PowerShell

A Get-Random cmdlet véletlen számot generál 0 és 2, 147, 483, 647 között (a nem aláírt 32 bites egész szám maximális értéke).

 Get-Random 
 1333190525 

A cmdlet számos lehetőséget kínál, például egy minimális és maximális értéket. Az értékek lekerekítettek, így 1 és 100 közötti szám létrehozásához állítsa a maximumot 101-re:

 Get-Random -Minimum 1 -Maximum 101 
 99 

Microsoft Excel

Az Excel táblázatban a = RAND () képlet véletlen számot generál 0 és 1 között. Például, ha kiemel egy cellát, és beírja a = RAND () értéket, akkor a cellában olyan szám lesz, amely változik, amikor a lap újra van -számított.

Ez a módszer más táblázatos alkalmazásokban is működik, beleértve a LibreOffice Calc és a Google lapokat is.

Programozási nyelveken

A legtöbb programozási nyelv saját PRNG funkcióval rendelkezik. Íme néhány gyakori példa:

C

A C programozási nyelvben a PRNG funkciókat a standard könyvtár, a stdlib határozza meg . A véletlen generátor közös módja a véletlen generátornak az időkorlátban megadott idő () függvénye. A generált szám 0 és a konstans RAND_MAX közé esik, a rendszer-specifikus egész szám garantáltan legalább 32767.

 #include #include #include void main () {srand (idő (NULL)); / * vetőmag a generátor * / int rand1 = rand (); / * 0 és RAND_MAX * / printf közötti pszeudorandom egész szám ("Random szám 0 és% d között:% d n", RAND_MAX, (int) rand1); / * Vagy egy meghatározott tartományon belül: * / int min = 0; int max = 100; float rand2 = (float) rand () * max / RAND_MAX + 1; int round = (int) rand2; printf ("Véletlenszám% d és% d között:% d (% f) n", min, max, kerek, rand2); Visszatérés; } 

output:

 Véletlen szám 0 és 2147483647 között: 1789080047 Véletlen szám 0 és 100 között: 74 (74.369179) 

C ++

C ++-ban:

 #include #include #include int main () {srand (idő (NULL)); std :: cout << "Véletlenszám 0 és" << RAND_MAX << "között:" << rand () << "n" << "Véletlen szám 1 és 100 között:" << (rand%) 100) + 1 << std :: endl; vissza 0; } 

output:

 Véletlen szám 0 és 2147483647 között: 126569208 Véletlen szám 1 és 100 között: 9 

Python 3

A Python véletlenszerű modulja számos funkciót kínál véletlenszámok létrehozására. Ebben a példában három különböző módszert alkalmazunk egy véletlen egész szám megtalálásához egy tartományban.

 véletlenszerű importálás datetime import datetime random.seed (datetime.now ()) print ("Random szám tartományban [0, 1]:", random.random ()) # Egy tartományon belül. Mindezek ugyanaz a dolog: nyomtatás ("Véletlen szám 1 és 100 között:", kerek (random.random () * 100) + 1) nyomtatás ("Random szám 1 és 100 között:", random.randrange (1, 101)) nyomtatás ("Véletlenszám 1 és 100 között:", random.randint (1, 100)) 

output:

 Véletlenszám a [0, 1] tartományban: 0, 05137418896158319 Véletlen szám 1 és 100 között: 27 Véletlen szám 1 és 100 között: 80 Véletlen szám 1 és 100 között: 80 

Perl 5

Perl-ben:

 srand (idő); # másodpercenként egyszer változik nyomtatás "Véletlen szám [0, 1] tartományban:", rand (), "n"; print "Véletlen szám [1, 100] tartományban:", int (rand (101)), "n"; 

output:

 Véletlenszám a [0, 1] tartományban: 0.691379946963028 Véletlen szám a tartományban [0, 100]: 82 

JavaScript

 console.log ("Random szám a tartományban [0, 1]:" + Math.random ()); console.log ("Véletlenszám a tartományban [1 100]:" + Matematika "(Math.random () * 101)); 

Tekintse meg a webböngésző JavaScript konzoljának kimenetét (például a Firefoxban nyomja meg a Ctrl + Shift + K billentyűkombinációt ):

 Véletlenszám a [0, 1] tartományban: 0.305008216755414 Véletlen szám a tartományban [1, 100]: 8 

Megjegyzés: A Math.random () függvény nem lehetséges a JavaScript-ben. Ha robusztus PRNG-t szeretne a JavaScript-ben, nézze meg a GitHub-on található JavaScript jobb véletlenszámát.

Példa PRNG: JavaScript widget

Az alábbi widgetet használva PRNG-t vethet, és véletlen számok létrehozásához használhatja.

Minden alkalommal, amikor véletlen számot generál az adott vetőmagról, az eltolás 1-rel növekszik. A vetőmagból előállított első szám nulla, a második 1-es eltolás, stb. A generátor mindig azonos számot ad egy adott magra és eltolásra .

Adjon meg valamit a mezőbe, hogy egyedi magot hozzon létre.

Használja a Generate (Generálás) gombot, hogy megkapja a következő véletlen számot a vetőmag használatával, és növelje az eltolást.

A Reset gombbal nullázhatja az eltolást.

a vetőmagból származó szám :

A vetőmag-eltolás alaphelyzetbe állítása (jelenleg 0 )

Ez a widget Johannes Baagøe nyílt forráskódú PRNG szkriptjeit használja, Alea.js és Mash.js.

Számítógépes biztonság, programozás, szoftverfeltételek