Question

J'ai quelques fonctions qui génèrent double, float, bref, des valeurs aléatoires à long. J'ai une autre fonction à laquelle je passe le type de données et qui doit retourner une valeur aléatoire. Maintenant, je dois choisir dans cette fonction la valeur de retour en fonction du type de données passé. Par exemple, si je passe flotteur, je dois:

la probabilité que le retour est un flotteur est de 70%, la probabilité que le retour est un double, de courte ou longue est de 10% chacun. Je peux faire des appels à l'autre fonction pour générer les valeurs aléatoires correspondantes, mais comment puis-je intégrer les poids probabilistes pour le retour final? Mon code est en C ++.

Quelques pointeurs sont appréciés.

Merci.

Était-ce utile?

La solution

nombres aléatoires C + ont uniforme . Si vous avez besoin variables aléatoires d'un autre Distribution vous devez fonder sa formule mathématique sur la distribution uniforme.

Si vous ne disposez pas d'une formule mathématique pour votre variable aléatoire que vous pouvez faire quelque chose comme ceci:

int x = rand() % 10;
if (x < 7)
{
 // return float
}
else (if x == 7)
{
 // return double
}
else (if x == 8)
{
 // return short
}
else (if x == 9)
{
 // return long
}

Autres conseils

Cela peut servir d'alternative pour les références futures qui peuvent obtenir la probabilité de valeurs précises, telles que 99,999% ou 0,0001% Pour obtenir la probabilité (pourcentage réel) faire en tant que tel:

//70%
double probability = 0.7;
double result = rand() / RAND_MAX;
if(result < probability)
   //do something

Je l'ai utilisé cette méthode pour créer de très grandes grilles percolé et il fonctionne comme un charme pour les valeurs de précision.

Je ne sais pas si je comprends bien ce que vous voulez faire, mais si vous voulez juste assurer que les probabilités sont 70-10-10-10, procédez comme suit:

  • générer un r de nombres aléatoires dans (1,2,3,4,5,6,7,8,9,10)
  • si r <= 7: float
  • si r == 8: court
  • si r == 9: à double
  • si r == 10: longue

Je pense que vous reconnaissez et peut adapter le modèle aux valeurs de probabilité arbitraires.

mmonem a un joli commutateur probabiliste, mais le retour de différents types n'est pas anodin non plus. Vous avez besoin d'un seul type qui peut adéquatement (pour vos besoins) encode l'une des valeurs - consultez boost :: tout, boost :: variante, union ou convertir au type le plus capable (probablement le double), ou une représentation de chaîne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top