Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

564
Vistas
Cómo simular una probabilidad del 60 % en Java con Math.random()

Quiero hacer algo si hay un 60% de posibilidades (solo usando Math.random()). Por ejemplo, una situación en la que cada valor en una matriz tiene un 60% de posibilidades de establecerse en 1, de lo contrario, 0.

Mi confusión es si debemos comprobar

 if (Math.random() < 0.6) { ... }

o

 if (Math.random() <= 0.6) { ... }

Mi opinión es que debería ser el primero porque 0.0 cuenta como un posible valor devuelto, pero me gustaría confirmar cuál debo usar y por qué.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Utilice el operador < .

Si bien esto es una simplificación, considere que las computadoras almacenan fracciones al sumar términos de la forma 2 −n . La mayoría de los números reales no se pueden representar con exactitud, y los literales como 0.6 se convierten al valor double más cercano de un conjunto finito.

Asimismo, la función random() no puede generar valores reales a partir de un rango continuo entre cero y uno. En cambio, elige un número entero de N elementos en el rango de 0 a N − 1, luego lo divide por N para producir un resultado (racional) en el rango [0, 1). Si desea satisfacer una condición con una probabilidad de P, debe ser cierto para P ⋅ N elementos del conjunto de N posibilidades.

Como el cero se cuenta como uno de los elementos, el valor de resultado máximo que debe incluirse es ( P ⋅ N − 1 ) / N . O, en otras palabras, deberíamos excluir P ⋅ N / N , es decir, P.

Esa exclusión de P es lo que lleva al uso de < .

Podría ser más fácil razonar cuando considere cómo usaría un método como nextInt() . Ahí, el efecto de cero en un rango pequeño es más obvio, y su expresión claramente usaría el operador < : current().nextInt(5) < 3 . Eso no cambiaría si divides el resultado: current().nextInt(5) / 5.0 < 0.6 . La diferencia entre nextInt(5) / 5.0 y random() es que este último tiene muchos más pasos, mucho más pequeños, entre 0 y 1.

Me disculpo por engañar a la gente con mi respuesta original y agradezco al usuario que me resolvió.

over 4 years ago · Santiago Trujillo Denunciar

0

Utilice < . Si alguna vez desea establecer sus probabilidades en 0%, entonces puede cambiar su valor de comparación a 0. Dado que Math.random() puede devolver 0, usar <= no daría como resultado una probabilidad de 0%. Como otros han señalado, la posibilidad de Math.random() genere el número exacto con el que está probando es extremadamente baja, por lo que para todos los valores que no sean 0 nunca notará una diferencia.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda