De ce trebuie să facem ' srand (time (NULL)) ' pentru generarea de numere aleatorii în C ++?


Cel mai bun răspuns

Nu pot oferi un răspuns mai bun decât Abhilash Gangadharan a oferit. Funcția „srand ()” a standardului Biblioteca C inițializează mai multe valori de care algoritmul pseudo-aleatoriu are nevoie pentru a genera o ieșire semi-unică.

În unele generatoare mai vechi, valoarea a fost utilizată direct pentru a porni sistemul, așa cum au făcut lucruri precum modul-prime matematică cu un feedback de la cel mai recent număr generat pentru a adăuga „entropie” la calcul și a face rezultatul să pară aleatoriu. Algoritmi mai moderni (cum ar fi oarecum faimosul „Mersenne Twister”) au un sistem similar de feed-back, dar acesta este folosit diferit pentru a asigura o cantitate mai mare de entropie, ceea ce face ca secvența numerelor generate să treacă un număr mai mare de teste statistice pentru aleatoriu.

Semănarea PRNG cu o valoare dată ar trebui să aibă întotdeauna rezultatul exact același – prin urmare, dacă sun „srand (12345)” într-un cod și generează „231,4492,2131” pe 14D EC2015, pot obține exact același rezultat pe 14DEC2016. (Acest lucru este de fapt folosit în unele părți ale criptografiei pentru a adăuga mai multă siguranță unor algoritmi, dacă îmi amintesc corect cercetările mele)

Răspuns

Acest lucru se numește „seed” generatorul de numere aleatorii . Acest lucru vă permite să generați aceeași secvență de numere aleatorii dacă utilizați o semință fixă ​​sau dacă utilizați un anumit parametru de sistem, cum ar fi timpul, atunci puteți începe cu o semință diferită de fiecare dată și să aveți secvențe diferite de numere aleatoare. Acest lucru vă ajută să verificați dacă rezultatul simulării stochastice nu este influențat de o anumită predictibilitate în secvența numerelor aleatorii.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *