Miért kell elvégeznünk a ' srand (idő (NULL)) ' véletlenszámok generálásához C ++ nyelven?


Legjobb válasz

Nem tudok jobb választ adni, mint Abhilash Gangadharan nyújtotta. A szabvány “srand ()” funkciója A C könyvtár számos olyan értéket inicializál, amelyekre az ál-véletlenszerű algoritmusnak félig egyedi kimenet létrehozásához van szüksége.

Néhány régebbi generátorban az értéket közvetlenül a rendszer indításához használták, mivel olyan dolgokat végeztek, mint a modulo-prime matematika némi visszajelzéssel a legutóbb generált számból, hogy hozzáadjuk az “entrópiát” a számításhoz, és az eredmény véletlenszerűnek tűnjön. A modernebb algoritmusok (például a kissé híres “Mersenne Twister”) hasonló visszacsatolási rendszerrel rendelkeznek, de ezt másként használják nagyobb mennyiségű entrópia biztosítása, ami a generált számok sorrendjénél nagyobb számú statisztikai teszten esik át a véletlenszerűség érdekében.

A PRNG adott értékkel történő elvetése mindig pontosan ugyanazt a kimenetet eredményezi – ennélfogva, ha valamilyen kódban hívom az “srand (12345)” szót, és ez a “231,4492,2131” kódot generálja a 14D-n EC2015, pontosan ugyanazt az eredményt tudom megszerezni a 14DEC2016 napon. (Ezt valójában a kriptográfia egyes részeiben használják, hogy nagyobb biztonságot nyújtsanak egyes algoritmusok számára, ha jól emlékszem a kutatásomra.) . Ez lehetővé teszi ugyanolyan véletlenszám-szekvencia létrehozását, ha fix magot használ, vagy ha valamilyen rendszerparamétert, például időt használ, akkor minden alkalommal más maggal kezdhet, és különböző véletlenszám-szekvenciákkal rendelkezhet. Ez segít ellenőrizni, hogy a sztochasztikus szimuláció eredményét nem befolyásolja-e valamilyen kiszámíthatóság a véletlenszerű számsorozatban.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük