srand() + time() en Linux

Pablo Cruz Navea pablo.cruz en gmail.com
Mar Oct 10 23:04:08 CLT 2006


On 10/8/06, Horst H. von Brand <vonbrand en inf.utfsm.cl> wrote:
> 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...)

¿De qué otra forma se podría obtener aleatorios binarios? Para dejar
de usar el rand () % 2 hice algo como esto:

....
srand (....);
val = rand () % 2000;
if (val >= 1000)
   num = 1;
else
   num = 0;
....

Pero eso dependerá de la probabilidad con que los números de rand () %
2000 sean mayores o iguales a 1000 (o bien menores que 1000). ¿Es
buena idea esto?

Saludos.



Más información sobre la lista de distribución Linux