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:
- Adja meg a PRNG-nek tetszőleges magot.
- 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