Álvéletlenszerűség



Álvéletlenszerű illusztráció

Álvéletlenszerűség számokat generálnak a számítógépek. Nem igazán véletlen , mert amikor 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ó, tervezése alapján. Tehát a kiszámíthatatlan dolgok létrehozásához a számítógépek matematikai módszereket használnak algoritmusok „elég véletlenszerű” számok előállításához.



Mikor használnak álvéletlenszerű számokat?

Az álneves számok elengedhetetlenek számos számítógépes alkalmazáshoz, például a játékokhoz és a biztonsághoz. A játékokban a véletlenszerű számok kiszámíthatatlan elemeket kínálnak, amelyekre a játékos reagálhat, például kikerülhet egy véletlenszerű golyót vagy kihúz egy kártyát egy pakliból.

A számítógépes biztonságban az álszúrás fontos a titkosítási algoritmusokban, amelyek olyan kódokat hoznak létre, amelyeket nem szabad megjósolni vagy kitalálni.



Mi az a PRNG?

NAK NEK álvéletlenszám-generátor , vagy PRNG , bármely program, vagy funkció , amely matematikával szimulálja a véletlenszerűséget. Nevezhetjük a DRNG (digitális véletlenszám-generátor) vagy DRBG (determinisztikus véletlenszerű bitgenerátor).

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



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

Az alapérték „kiindulópont” a véletlenszámok létrehozásához. Az értéket a számok kiszámításakor használják. Ha a mag értéke változik, akkor a generált számok is változnak, és egyetlen mag értéke mindig ugyanazokat a számokat adja. Emiatt a számok nem igazán véletlenszerűek, mert az igazi véletlenszerűséget soha nem lehetne újra létrehozni.

Az aktuális időt gyakran használják egyedi magértékként. Például, ha március 5-e van, 2018 , 17: 03-kor. és 7,01324 másodperc UTC, amely egész számként kifejezhető. Ez a pontos idő soha többé nem fordul elő, ezért az adott maggal rendelkező PRNG-nek egyedi véletlenszám-halmazot kell előállítania.

jegyzet

Hasznos lehet egy véletlenszerűen generált szekvencia reprodukálása. Akadémiai alkalmazásokban egy véletlenértékek hatalmas szekvenciája generálható egy szimulációhoz, majd pontosan reprodukálható későbbi részletesebb elemzés céljából. Másik példa: ha a számítógépes játékokban egy játékos betöltött játékot tölt be, akkor a „véletlenszerű” események ugyanazok lehetnek, mintha a játék soha nem állna le. Így a játékos nem töltheti be ismételten ugyanazt a játékot, hogy jobb szerencsét próbáljon meg.

Hogyan állítsunk elő álvéletlenszerű számokat

Az alábbiakban bemutatunk néhány álnevet a közös programokban és a programozási nyelvekben.

Windows parancssor

A Windows-nál parancssor , vagy kötegelt fájlban a speciális környezeti változó %VÉLETLEN% 0 és 32767 közötti álnevet állít elő, a parancssor elindításának idejével.

echo 'So %RANDOM%!'
'So 27525!'

1 és 100 közötti véletlenszámot generáló kötegelt fájl létrehozása:

copy con sorandom.bat echo off set /a myrand=%RANDOM%*100/32768+1 echo The number I was thinking of was %myrand%. Did you get it right?

nyomja meg Ctrl + Z és Belép a kötegelt fájl mentéséhez. Ezután hajtsa végre a fájlt:

sorandom
The number I was thinking of was 91. Did you get it right?

Windows PowerShell

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

Get-Random
1333190525

A parancsmag számos lehetőséget kínál, például egy minimális és egy maximális értéket. Az értékeket lefelé kerekítik, így 1 és 100 közötti szám előállításához állítsa a maximumot 101-re:

Get-Random -Minimum 1 -Maximum 101
99

Microsoft Excel

Egy an Excel táblázat , a képlet = RAND () véletlen számot generál 0 és 1 között. Például, ha kiemel egy cellát és beírja = RAND () , a cella létrehoz egy számot, amely a lap újraszámításakor változik.

RAND () random függvény a Microsoft Excelben

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

Programozási nyelvekben

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

C

Ban,-ben C programozási nyelv , a PRNG függvényeket a standard könyvtár határozza meg, stdlib . A véletlen generátor elvetésének általános módja a idő() függvény, deklarálva idő.h . A generált szám közé esik 0 és az állandó RAND_MAX , egy rendszer-specifikus egész szám garantáltan legalább 32767.

#include #include #include void main () { srand(time(NULL)); /* seed the generator */ int rand1 = rand(); /* a pseudorandom integer between 0 and RAND_MAX */ printf('Random number between 0 and %d: %d
', RAND_MAX, (int)rand1); /* Or, within a specific range: */ int min = 0; int max = 100; float rand2 = (float)rand() * max / RAND_MAX + 1; int round = (int)rand2; printf('Random number between %d and %d: %d (%f)
', min, max, round, rand2); return; }

Kimenet:

Random number between 0 and 2147483647: 1789080047 Random number between 0 and 100: 74 (74.369179)

C ++

Ban ben C ++ :

#include #include #include int main () { srand(time(NULL)); std::cout << 'Random number between 0 and ' << RAND_MAX << ': ' << rand() << '
' << 'Random number between 1 and 100: ' << (rand() % 100) + 1 << std::endl; return 0; }

Kimenet:

Random number between 0 and 2147483647: 126569208 Random number between 1 and 100: 9

Python 3

A véletlen A Python modul különféle funkciókat kínál a véletlenszámok előállításához. 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.

import random from datetime import datetime random.seed(datetime.now()) print('Random number in range [0,1): ', random.random()) # Within a range. These all do the same thing: print('Random number between 1 and 100: ', round(random.random() * 100) + 1) print('Random number between 1 and 100: ', random.randrange(1, 101)) print('Random number between 1 and 100: ', random.randint(1, 100))

Kimenet:

Random number in range [0,1): 0.05137418896158319 Random number between 1 and 100: 27 Random number between 1 and 100: 80 Random number between 1 and 100: 80

Perl 5

Ban ben Perl :

srand(time); # changes once per second print 'Random number in range [0,1): ', rand(), '
'; print 'Random number in range [1, 100]: ', int(rand(101)), '
';

Kimenet:

Random number in range [0,1): 0.691379946963028 Random number in range [0, 100]: 82

JavaScript

console.log('Random number in range [0,1): ' + Math.random()); console.log('Random number in range [1,100]: ' + Math.floor(Math.random() * 101));

Tekintse meg a kimenetet a böngésző JavaScript konzolján (például Firefox nyomja meg Ctrl + Váltás + NAK NEK ):

Random number in range [0,1): 0.305008216755414 Random number in range [1,100]: 8
Jegyzet:

Nem lehet magot vetni Math.random () funkció a JavaScript-ben. Ha robusztus PRNG-re van szüksége a JavaScript-ben, nézze meg jobb véletlenszámok a JavaScript számára a GitHubon.

Példa PRNG: JavaScript widget

Az alábbi widget használatával kiválaszthat egy PRNG-t, és véletlenszerű számok előállítására használhatja fel.

Minden alkalommal, amikor véletlen számot generál az adott magból, annak eltolódása 1-vel növekszik. Az első magból generált szám nullát, a második 1-et stb. Eltol. A generátor mindig ugyanazt a számot állítja elő egy adott maghoz és az eltoláshoz .

Írjon be bármit a mezőbe egyedi mag létrehozásához.

A Generálás gombbal szerezheti be a következő véletlenszámot az adott mag segítségével, és növelje az eltolást.

A Reset gombbal állítsa nullára az eltolást.

Adjon meg egyéni magot (számot vagy kifejezést):

Generál! magból generált szám :

A vetőmag eltolásának visszaállítása (jelenleg 0 )

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