Varför behöver vi göra ' srand (tid (NULL)) ' för att generera slumptal i C ++?


Bästa svaret

Jag kan inte ge ett bättre svar än vad Abhilash Gangadharan har gett. Funktionen ”srand ()” för standarden C-biblioteket initierar flera värden som den pseudoslumpmässiga algoritmen behöver för att generera semi-unik utdata.

I vissa äldre generatorer användes värdet direkt för att starta systemet, eftersom de gjorde saker som modulo-prime matematik med lite feedback från det senast genererade numret för att lägga till ”entropi” i beräkningen och få resultatet att bli slumpmässigt. Mer moderna algoritmer (som den något berömda ”Mersenne Twister”) har ett liknande återkopplingssystem men detta används annorlunda för att ge en större mängd entropi, vilket gör att sekvensen av siffror som genereras passerar ett större antal statistiska tester för slumpmässighet.

Såning av PRNG med ett givet värde bör alltid resultera i exakt samma utdata – därmed om jag kallar ”srand (12345)” i någon kod och det genererar ”231,4492,2131” på 14D EC2015, jag kan få exakt samma resultat den 14DEC2016. (Detta används faktiskt i vissa delar av kryptografi för att öka säkerheten för vissa algoritmer, om jag kommer ihåg min forskning korrekt.)

Svar

Detta kallas ”seed” slumpgenerator . Detta låter dig generera samma sekvens av slumpmässiga nummer om du använder ett fast frö eller om du använder någon systemparameter som tid kan du börja med ett annat frö varje gång och ha olika sekvenser av slumpmässiga nummer. Detta hjälper dig att kontrollera om resultatet av din stokastiska simulering inte påverkas av någon förutsägbarhet i slumptalsekvensen.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *