9
votes

Comment générer un booléen avec une probabilité P à l'aide de la fonction C Rand ()?

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 ...
}


0 commentaires

3 Réponses :


1
votes

Vous voulez dire générer une variable aléatoire de sorte que p (1) = p et p (0) = (1-p)?

Si tel est le cas, comparez la sortie de rand () à p * rand_max . .


0 commentaires

11
votes
bool nextBool(double probability)
{
    return rand() <  probability * ((double)RAND_MAX + 1.0);
}

3 commentaires

Le second pourrait réellement être plus rapide. Ils sont mathématiquement identiques.


Qui doit être probabilité * (rand_max + 1) - sinon, transmettre une valeur de 1.0 comme probabilité 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 généré un débordement entier



0
votes

Le générateur suivant ne doit pas être biaisé, donné de rand () efficacement uniforme et indépendant: xxx

note, tandis que lorsque la fonction est récursive,

  1. Probabilité de l'appel récursif est 1.0 / rand_max , c'est assez petit,
  2. Il doit être récursif ou d'une autre manière appeler rand () plusieurs fois, si vous souhaitez utiliser probabilité différent de multiples de 1.0 / rand_max .

    Notez également que la probabilité est encore un peu biaisée. Voir Cette question.


0 commentaires