Capítulo 002 Ejercicio 022 (Límites Aleatorios)

// ¿Produce Math.random() los valores de 0.0 y 1.0?

/** Hay una segunda cuestión que concierne a Math.random(). ¿Produce un valor de cero a uno,
* inlcluyendo o excluyendo el valor "1"? En el lingo matemático ¿es (0,1) ó [0,1], ó (o,1] ó [0,1)?
* (El corchete significa "incluye" mientras que el paréntesis significa "excluye"). De nuevo, la
* solución la puede proporcionar un programa de prueba:
*
*/

public class LimitesAleatorios{

static void uso(){
System.out.println("Utilización: \n\t" +
"Limites Aleatorios inferior\n\t" +
"Limites Aleatorios superior");
System.exit(1);
}

public static void main(String args[]){
if(args.length != 1)
uso();

if(args[0].equals("inferior")){
while(Math.random() != 0.0)
; // Seguir intentándolo
System.out.println("Produjo 0.0!");
}else if(args[0].equals("superior")){
while(Math.random() != 1.0)
; // Seguir intentándolo
System.out.println("Produjo 1.0!");
}
else
uso();
}
}

/** Para ejecutar el programa se teclea una línea de comando como:
*
* java LimitesAleatorios inferior
*
* o
*
* java LimitesAleatorios superior
*
* En ambos casos nos vemos forzados a romper el programa manualmente, de forma que da la sensación
* de que Math.random() nunca produce ni 0,0 ni 1,0. Pero éste es el punto en el que un experimo
* así puede defraudar. Si se considera que hay al menos 2^62 fracciones double distintas entre
* 0 y 1. La probabilidad de alcanzar cualquier valor experimentalmente podría superar el tiempo de
* vida de un computador o incluso el de la persona que realiza la prueba. Resulta que 0,0 está incluido
* en la salida de Math.random(). O, en el lingo de las matemáticas es [0,1).
*
**/