Secondo lo standard, std::random_device
funziona nel seguente modo:Quando uso std :: random_device?
result_type operator()();
Restituisce: un valore casuale non deterministico, uniformemente distribuito tra
min()
emax()
, inclusiva. È definito dall'implementazione come vengono generati questi valori.
E ci sono un paio di modi si può usare. Seminare un motore:
std::mt19937 eng(std::random_device{}());
come motore per sé:
std::uniform_int_distribution<> uid(1, 10);
std::cout << dist(dev);
Poiché è definito dall'implementazione, non suona forte come dire std::seed_seq
o srand(time(nullptr))
. Preferisco usarlo come seme, come motore o per niente?
Sfortunatamente, devi stare attento. Ad esempio, [MinGW non implementa 'std :: random_device' bene] (http://stackoverflow.com/q/18880654/10077). –
Vorrei andare per la prima opzione, ma dipende anche dalla qualità del motore con cui vuoi seminare. – didierc
Potrebbe essere più forte di quelle tecniche che non sono crittograficamente forti. Ad esempio, Visual C++ utilizza [RtlGenRandom] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa387694.aspx). –