srand() + time() en Linux
Horst H. von Brand
vonbrand en inf.utfsm.cl
Dom Oct 8 22:21:50 CLT 2006
Pablo Cruz Navea <pablo.cruz en gmail.com> wrote:
> estoy trabajando con un programa en C que depende de la generación de
> números aleatorios. Lo que hago es lo siguiente:
>
> ....
> srand (time (NULL));
> i = rand () % 2;
> ....
> Lo de %2 es para generar sólo números binarios. El problema que tengo
> es que time (NULL) varÃa muy lentamente, y el programa se "pega" mucho
> tiempo con los mismos números.
- Se llama srand(3) /una/ vez al comienzo del programa, no cada vez!
- Usa gettimeofday(2) como fuente de la semilla inicial si segundos no te
basta, combina con getpid(2), ...
- /Lee/ el manual de srand(3), dice /explicitamente/ que esa manera de
obtener bits aleatorios no se recomienda (en las implementaciones tipicas
de rand(3), simplemente obtienes una secuencia alternante 0101010...)
Sheesh...
--
Dr. Horst H. von Brand User #22616 counter.li.org
Departamento de Informatica Fono: +56 32 2654431
Universidad Tecnica Federico Santa Maria +56 32 2654239
Casilla 110-V, Valparaiso, Chile Fax: +56 32 2797513
Más información sobre la lista de distribución Linux