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é.
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ó.
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.