Vorrei generare numeri casuali uniformi in C++ tra 0 e 1, in un modo che non utilizza il metodo standard rand()
e srand(time(NULL))
. Il motivo è che se eseguo l'applicazione più volte nello stesso secondo del mio orologio, il seme sarà esattamente lo stesso e produrrà lo stesso risultato.generazione di numeri casuali in C++ utilizzando TR1/dev/random (resiliente a <1 secondo)
Non voglio fare affidamento su impulso o specifiche di OS/compilatore. x86 può essere assunto.
Sembra che un modo alternativo per farlo sia utilizzare TR1 (non ho C++ 11) e seminare con /dev/random
in qualche modo?
In questo momento ho questo, ma usa ancora time(NULL)
come un seme che non funziona bene all'interno 1 viene eseguito secondo:
#include <iostream>
#include <tr1/random>
int main()
{
std::tr1::mt19937 eng;
eng.seed(time(NULL));
std::tr1::uniform_int<int> unif(1, RAND_MAX);
int u = unif(eng);
std::cout << (float)u/RAND_MAX << std::endl;
}
Sei disposto a utilizzare le funzioni specifiche di OS/compilatore? – Mysticial
Mi piacerebbe evitare questo ... lo distribuirò su vari sistemi – gnychis
Quanto vari? Sono ancora tutti x86? – Mysticial