Comment puis-je générer un booléen aléatoire avec une probabilité de p code> (où 0 rand () code> fonctionner? IE P>
bool nextBool(double probability)
{
return ...
}
3 Réponses :
Vous voulez dire générer une variable aléatoire de sorte que p (1) = p et p (0) = (1-p)? p>
Si tel est le cas, comparez la sortie de rand () code> à
p * rand_max code>. p>.
bool nextBool(double probability) { return rand() < probability * ((double)RAND_MAX + 1.0); }
Le second pourrait réellement être plus rapide. Ils sont mathématiquement identiques.
Qui doit être probabilité * (rand_max + 1) code> - sinon, transmettre une valeur de
1.0 code> comme
probabilité code> entraînera la fonction renvoyée 0 parfois .
Merci beaucoup. J'ai corrigé un problème mineur dans votre deuxième version, en tant que +1 code> généré un débordement entier
Le générateur suivant ne doit pas être biaisé, donné de rand () efficacement uniforme et indépendant: note, tandis que lorsque la fonction est récursive, p> Notez également que la probabilité est encore un peu biaisée. Voir Cette question. P> p>
1.0 / rand_max code>, c'est assez petit, li>
rand () code> plusieurs fois, si vous souhaitez utiliser
probabilité code> différent de multiples de
1.0 / rand_max code>. li>
ol>