[C con Clase] Limitar el rango de un numero aleatorio

Programante programante en gmail.com
Vie Jun 19 22:56:50 CEST 2009


Mariano Demarchi escribió:
> Hola a todos, estaba viendo un mail que enviaron a la lista en donde
> decian que cuando se quiere limitar el rango en el que se obtienen
> valores aleatorios, por ejemplo usando rand(), la expresion:
> valor_generado = valor_inicial + (int)(
> rand()*(intervalo/(RAND_MAX+1.0)) + 0.5 );
> genera valores mas aleatorios que:
> valor_generado = valor_inicial + rand() % intervalo;
> Para mi no es asi, pero me gustaria saber su opinion y la razon de ésta.
> Saludos

Porque puede no haber el mismo número de elementos en cada clase.
Supongamos que RAND_MAX sea 9, es decir, que tienes una función que te
produce un
número perfectamente aleatorio de 0 a 9.

Si lo que quieres es obtener un número de 0 a 4, el módulo te sirve
perfectamente, porque
todas las clases tienen los mismos elementos.
En cambio si lo que quieres es un número de 0 a 5 (por ejemplo para
simular un dado)
usar el módulo te dará un resultado sesgado:

Tu valor | Valores de la función aleatoria | Frecuencia
0 -> 0, 6  20%
1-> 1, 7  20%
2 -> 2, 8  20%
3 -> 3, 9  20%
4 -> 4     10%
5 -> 5    10%

¡Cuesta el doble sacar los números altos! (aunque dependiendo del juego,
igual te interesa, jeje).







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