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