Si estoy en un lenguaje de codificación de donde puedo crear un número aleatorio para un rango determinado (es decir, de 0 a 50, o -30 a 751, etc.) ¿Cómo puedo matemáticamente crear un +1 o -1 (no +1, 0 o -1) utilizando sólo las matemáticas y la función random.. no se si las declaraciones.

2 Comentarios

  1. 45

    Fácil. random(0,1) * 2 - 1 de hacerlo.

    • En R: system.time(replicate(10,floor(runif(1e6, 0, 2)) * 2 - 1)) user system elapsed 1.07 0.05 1.13 system.time(replicate(10,sample(c(1,-1), 1e6, replace = T))) 0.39 0.09 0.49
  2. 4

    Usted podría conseguir un número aleatorio y se dividen por el valor absoluto de sí mismo. Algo como lo siguiente en C#:

    Random r = new Random(); 
    int iNum; 
    int result;
    
    iNum = r.Next(-30, 50); //put whatever range you want in here from negative to positive 
    result = iNum /(int)Math.Abs(iNum);
    
    • Aunque usted pueda golpear una división por cero. Esto puede ser editado para puede agregar a los sucesivos rand números, es decir, aluminio = r.Siguiente(-30,50) + r.Siguiente(-30,50) (o incluso añadir un 1 al original de aluminio?). Esperemos que sea cual sea el idioma que está utilizando tiene un buen generador de números aleatorios donde no va a producir el mismo número (por ejemplo, 0) dos veces en una fila.
    • Estoy trabajando en objective-c .. esta fue mi ruta original, pero me golpeó una división por cero y la aplicación de dejar de fumar jajaja… El usuario por encima de los que comentaron con random(0,1) * 2 - 1 tiene un gran método, aunque. 🙂
    • Un generador de números aleatorios que nunca da el mismo número dos veces en una fila no ser particularmente «bueno».
    • nithins: tenga en cuenta que si se añaden dos números aleatorios usted no consigue una distribución uniforme más. Podría ser que es un problema no sólo para dos valores, pero en general me gustaría tener cuidado.

Dejar respuesta

Please enter your comment!
Please enter your name here