Me gustaría generar números aleatorios uniformes en C++ entre 0 y 1, de una manera que no utiliza el método estándar rand()
y srand(time(NULL))
. La razón de esto es que si ejecuto la aplicación más de una vez dentro del mismo segundo de mi reloj, la semilla será exactamente la misma y producirá el mismo resultado.generando números aleatorios en C++ usando TR1/dev/random (resistente a <1 segundo de ejecuciones)
No deseo confiar en los detalles del compilador o el sistema operativo/compilador. x86 se puede suponer.
Parece que una forma alternativa de hacerlo es usar TR1 (no tengo C++ 11) y sembrar con /dev/random
de alguna manera?
Ahora mismo tengo unas pocas cosas, pero todavía utiliza time(NULL)
como una semilla que no va a funcionar bien dentro de 1 segundo corre:
#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;
}
¿Está dispuesto a utilizar funciones específicas de OS/compilador? – Mysticial
Me gustaría evitar esto ... Lo implementaré en varios sistemas – gnychis
¿Cuán variado? ¿Todavía son todos x86? – Mysticial