Hey, est-il moyen de choisir des nombres aléatoires répartis uniformément? J'ai utilisé cette fonction qui retourne 1 ou 0. Cependant, je ne pense pas qu'il a exactement 50% de chances de produire l'une ou l'autre. Meilleures pensées? Merci p> p>
6 Réponses :
Il génère 0 ou 1 avec des chances égales.
Mais pourquoi n'avez-vous pas utilisé: p> ? Voulez-vous être capable de changer pour générer 0, 1, 2, ..., n? Si c'est le cas, gardez votre implémentation. P> p>
La chance d'un seul résultat est exactement 50%. Qu'est-ce qui vous fait penser que ce n'est pas? P>
Il est suffisamment proche de 50% au point de savoir où, si vous êtes inquiet pour une divergence (si en en existe un), vous n'utiliseriez pas de chiffres aléatoires pseudo en premier lieu: -) P>
Courir une boucle avec 10 millions d'itérations me donne un ratio de 5 000 931 à 4 999 069, une erreur d'un seul sur dix mille (0,00931%). P>
Il devrait vous donner une distribution même. Vous pouvez l'essayer en copier-coller dans la barre d'adresse: P> javascript:var a=new Array(0,0); for (i=0; i<100000; i++) a[Math.floor(Math.random() * 2)]++; alert(a);
OOH, c'est une astuce soignée que je n'avais pas vue auparavant (JavaScript codant dans la barre d'adresse). Plus besoin d'écrire des fichiers HTML avec source intégrée pour moi. +1 juste pour ça!
@paxdiablo ou vous pouvez utiliser la console Firebug de Firefox, la console incluse de Chrome, la console incluse de l'opéra. Je ne connais pas d'autres navigateurs, mais ils ont probablement des plugins ou des outils aussi.
Si vous ne croyez pas, vérifiez:
<script type="text/javascript">
var total = 0;
var ones = 0;
for (var i = 0; i < 100000; i++, total++) {
ones += Math.floor(Math.random()*2);
}
alert(ones/total);
</script>
Essayez simplement:
<script type="text/javascript">
var zero=0;
var one=0;
for (var i=0;i<1000000;i++)
{
var num=Math.floor(Math.random()*2)
if (num) zero++;
if (!num) one++;
}
document.write("Zero: "+zero+"<br />");
document.write("One: "+one+"<br />");
</script>
Imo c'est bon.
math.random () * 2 code> retourne un numéro entre 0 et dire 1,99; Revêtement de sol, il vous donnera 0 sur les valeurs 0-0.99 et 1 pour les valeurs 1-1.99, donc sa jolie même. Mais j'ai peur que Somone ait une meilleure idée.Pourquoi ne pensez-vous pas que ce soit exactement 50% pour l'un ou l'autre? En cours d'exécution 10000 fois et la moyenne des résultats me donne 0,5026, ce qui représente presque exactement 50% 0 50% 1's. (C'est dans Firefox 4)