Miksi meidän on tehtävä ' srand (aika (NULL)) ' satunnaislukujen tuottamiseksi C ++: ssa?


Paras vastaus

En voi antaa parempaa vastausta kuin Abhilash Gangadharan on tarjonnut. Standardin ”srand ()” -toiminto C-kirjasto alustaa useita arvoja, joita näennäissatunnaisalgoritmin on tuotettava puolittain ainutlaatuinen lähtö.

Joissakin vanhemmissa generaattoreissa arvoa käytettiin suoraan järjestelmän käynnistämiseen, koska he tekivät esimerkiksi modulo-prime matematiikka, jossa on palautetta viimeisimmältä luvulta, jotta laskentaan voidaan lisätä ”entropia” ja saada tulos näyttämään satunnaiselta. Nykyaikaisemmilla algoritmeilla (kuten hieman kuuluisalla ”Mersenne Twister”) on samanlainen palautejärjestelmä, mutta tätä käytetään eri tavalla tarjota suurempi määrä entropiaa, mikä saa aikaan generoidun lukusarjan läpäisemään suuremman määrän satunnaisuustutkimuksia.

PRNG: n kylvämisen tietyllä arvolla pitäisi aina johtaa täsmälleen samaan tulokseen – siis jos kutsun ”srand (12345)” jossakin koodissa ja se tuottaa ”231,4492,2131” 14D: ssä EC2015, saan täsmälleen saman tuloksen 14DEC2016. (Tätä käytetään tosiasiallisesti salauksen joissakin osissa lisäämään tietyille algoritmeille tietoturvaa, jos muistan tutkimukseni oikein)

Vastaus

Tätä kutsutaan ”siemeneksi” satunnaislukugeneraattoriksi . Tämän avulla voit luoda saman satunnaislukusarjan, jos käytät kiinteää siementä tai jos käytät jotain järjestelmän parametria, kuten aikaa, voit aloittaa aina eri siemenillä ja sinulla on erilaiset satunnaislukujen sekvenssit. Tämä auttaa sinua tarkistamaan, eivätkö satunnaisluvun ennustettavuus vaikuta stokastisen simulaation tulokseen.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *