sábado, enero 08, 2011

Midiendo el azar de nuestro sistema


No hay azar en nuestro ordenador. Es una ilusión que funciona, pero no verdadero azar.

Por eso es conveniente probar hasta que punto nos podemos fiar de las funciones RANDOM.

En el programa de la incluimos iostream para poder utilizar el
cout
.

stdlib para la función srand() y time para poder pasarle la hora actual a srand() como semilla.

Iniciamos una secuencia de números aleatorios con SRAND. Luego se invoca RAND las veces que haga falta.

El valor aleatorio máximo que se puede generar es la constante RAND_MAX.
Obtener un valor entre 0 y un entero N determinado:
valor = rand() % (limiteSuperior + 1)


Valor entre límite inferior y límite superior:

valor = rand() % (limiteSuperior - limiteInferior + 1) + limiteInferior


Valor entre 0 y 1:

Hacemos una conversión a float:

valor = (float) rand() / RAND_MAX


El programa de arriba toma valores entre 1 y 2. Cuando se llega a 10⁹ ocurrencias para y muestra los resultados:

Ya se ve que consigue resultados muy cercanos al teórico 50%.

Por cierto, para que muestre el error en formato "natural" en lugar de en notación científica he tenido que utilizar:

cout(setf(ios_base::fixed)

Para forzar notación científica diremos ios_base::scientific

Saludos.

No hay comentarios: