Es importante interpretar el código bien antes de adaptarlo a tu proyecto y si tquieres aportar algo puedes dejarlo en los comentarios.
Solución:
Podrías hacer algo como…
var probability = function(n)
return !!n && Math.random() <= n;
;
Entonces llámalo con probability(.7)
. funciona porque Math.random()
devuelve un número entre e inclusive de 0
y 1
(Ver comentario).
Si debes usar 70
simplemente divídalo 100
en el cuerpo de su función.
Función Probabilidad:
probability(n)
return Math.random() < n;
// Example, for a 75% probability
if(probability(0.75))
// Code to run if success
Si leemos sobre Math.random(), devolverá un número en el intervalo[0;1)queincluye[0;1)intervalwhichincludes0
pero excluir 1
por lo que para mantener una distribución uniforme, necesitamos excluir el límite superior, es decir, usando <
y no <=
.
Comprobación de la probabilidad límite superior e inferior (que son 0% o 100%):
Lo sabemos 0 ≤ Math.random() < 1
entonces, para un:
-
Probabilidad de 0% (cuando
n === 0
siempre debe regresar false):Math.random() < 0 // That actually will always return always false => Ok
-
Probabilidad del 100% (cuando
n === 1
siempre debe regresar true):Math.random() < 1 // That actually will always return always true => Ok
Ejecución de la prueba de la función de probabilidad
// Function Probability
function probability(n)
return Math.random() < n;
// Running test with a probability of 86% (for 10 000 000 iterations)
var x = 0;
var prob = 0.86;
for(let i = 0; i < 10000000; i++)
if(probability(prob))
x += 1;
console.log(`$x of 10000000 given results by "Math.random()" were under $prob`);
console.log(`Hence so, a probability of $x / 100000 %`);
Si haces scroll puedes encontrar las explicaciones de otros administradores, tú además tienes la opción de insertar el tuyo si dominas el tema.