Hvorfor skal vi gøre ' srand (tid (NULL)) ' til generering af tilfældige tal i C ++?


Bedste svar

Jeg kan ikke give et bedre svar end Abhilash Gangadharan har givet. Funktionen “srand ()” af standarden C-bibliotek initialiserer flere værdier, som den pseudo-tilfældige algoritme har brug for for at generere semi-unik output.

I nogle ældre generatorer blev værdien direkte brugt til at starte systemet, da de gjorde ting som modulo-prime matematik med noget feedback fra det senest genererede tal for at tilføje “entropi” til beregningen og få resultatet til at virke tilfældigt. Mere moderne algoritmer (som den noget berømte “Mersenne Twister”) har et lignende feed-back-system, men dette bruges forskelligt at sørge for en større mængde entropi, som får den genererede rækkefølge til at passere et større antal statistiske tests for tilfældighed.

Såning af PRNG med en given værdi skal altid resultere i nøjagtig samme output – derfor hvis jeg kalder “srand (12345)” i en eller anden kode, og den genererer “231,4492,2131” på 14D EC2015, jeg kan få nøjagtigt det samme resultat den 14.DEC2016. (Dette bruges faktisk i nogle dele af kryptografi for at tilføje mere sikkerhed til nogle algoritmer, hvis jeg husker min forskning korrekt)

Svar

Dette kaldes “frø” generatoren for tilfældige tal . Dette giver dig mulighed for at generere den samme rækkefølge af tilfældige tal, hvis du bruger et fast frø, eller hvis du bruger et systemparameter som tid, så kan du starte med et andet frø hver gang og have forskellige sekvenser af tilfældige tal. Dette hjælper dig med at kontrollere, om resultatet af din stokastiske simulering ikke påvirkes af en vis forudsigelighed i den tilfældige talrækkefølge.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *