srand() + time() en Linux

Alvaro Herrera alvherre en alvh.no-ip.org
Mie Oct 11 08:59:28 CLT 2006


Pablo Cruz Navea escribió:

> ¿De qué otra forma se podría obtener aleatorios binarios?

Para que quieres los numeros?  Si tu aplicacion depende de tener una
buena fuente de numeros aleatorios, tendrias que dedicarle mucho tiempo
a estudiar el tema.  (Por ejemplo criptografia).  Si es algo menos
critico, entonces cualquier receta que te de numeros mas o menos
aleatorios es suficiente.

Asumo que tu caso es el segundo, es decir, no es _tan_ importante que la
aleatoriedad sea de muy buena calidad.

> 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?

Es buena idea, siempre y cuando sustituyas el 2000 por RAND_MAX y el
1000 por RAND_MAX/2.  Lo malo de esto es que es muy lento.  Una idea un
poco mejor podria ser hacer bit-shifting para obtener uno de los bits de
mas arriba, como te sugirieron en otra respuesta a este correo.  Eso es
mucho mas rapido.

-- 
Alvaro Herrera                           Developer, http://www.PostgreSQL.org
"El sabio habla porque tiene algo que decir;
el tonto, porque tiene que decir algo" (Platon).


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