6
votes

nombres aléatoires distribués uniformément

Hey, est-il moyen de choisir des nombres aléatoires répartis uniformément? J'ai utilisé cette fonction xxx

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


2 commentaires

Imo c'est bon. math.random () * 2 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)


6 Réponses :


1
votes

Il génère 0 ou 1 avec des chances égales.

Mais pourquoi n'avez-vous pas utilisé: xxx

? Voulez-vous être capable de changer pour générer 0, 1, 2, ..., n? Si c'est le cas, gardez votre implémentation.


0 commentaires

0
votes

La chance d'un seul résultat est exactement 50%. Qu'est-ce qui vous fait penser que ce n'est pas?


0 commentaires

1
votes

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: -)

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%).


0 commentaires

4
votes

Il devrait vous donner une distribution même. XXX PRE>

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);


2 commentaires

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.



6
votes

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>


0 commentaires

3
votes

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>


0 commentaires