O buna prng (Pseudo-Random Number Generator) algoritm va avea un ciclu de timp în timpul căreia nu va fi niciodată în aceeași stare. Dacă vă expune întreaga stare a prng numărului recuperat de la ea, veți primi un număr garantat unic pentru perioada generatorului.
Un prng simplu care face acest lucru se numește „ Linear Congruential prng“ , care o formulă reiterează:
X(i) = AX(i-1)|M
Folosind dreptul de pereche de factori puteți obține o perioadă de 2 ^ 30 (aproximativ 1 miliard) dintr-un prng simplu, cu un acumulator de 32 de biți. Rețineți că veți avea nevoie de un pic mai lung de 64 de lungă variabilă temporară pentru a menține elementul intermediar „AX“ din calcul. Cele mai multe, dacă nu toate compilatoare C va sprijini acest tip de date. Ar trebui să fie, de asemenea, posibilitatea de a face cu un tip de date numerice pe cele mai multe dialecte SQL.
Cu valorile corecte ale lui A și M putem obține un generator de numere aleatoare cu proprietăți statistice și geometrice bune. Există un faimos material despre scris de Fishman și Moore.
Pentru M = 2 ^ 31-1 obținem pot folosi valorile A de mai jos pentru a obține un prng cu o frumoasă perioadă lungă (2 ^ 30 IIRC).
Valori bune de A:
742,938,285
950,706,376
1,226,874,159
62,089,911
1,343,714,438
Rețineți că acest tip de generator este (prin definiție) nu criptografic securizat. Dacă știți ultimul număr generat de la ea poti prezice ce va face în continuare. Din păcate , cred că nu se poate obține de securitate criptografică și garantată fără repetabilitate în același timp. Pentru o prng să fie criptografic securizat ( de exemplu , Blum Blum Shub ) nu poate expune starea suficientă într - un număr generat pentru a permite numărul următor în secvența care urmează să fie prezise. Prin urmare , starea internă este mai mare decât numărul generat și (pentru a avea securitate bun) perioada va fi mai mare decât numărul de valori posibile care pot fi generate. Acest lucru înseamnă că numărul expus nu va fi unic în perioada.
Din motive similare , același lucru este valabil generatoare de perioadă lungă , cum ar fi Mersenne Twister.