Frage

Ich habe einige Funktionen, die doppelt, Schwimmer erzeugen, kurz, lang Zufallswerte. Ich habe eine andere Funktion, auf die ich den Datentyp übergeben und die einen zufälligen Wert zurückgeben soll. Jetzt muss ich in dieser Funktion den Rückgabewert wählen, basierend auf dem übergebenen Datentyp. Zum Beispiel, wenn ich Schwimmer passieren, ich brauche:

die Wahrscheinlichkeit, dass die Rückkehr ein Schwimmer beträgt 70%, die Wahrscheinlichkeit, dass die Rückkehr ist ein doppeltes, kurz oder lang je 10% ist. Ich kann Anrufe an die andere Funktion machen die entsprechenden Zufallswerte zu erzeugen, aber wie kann ich in den Wahrscheinlichkeitsgewichte für die endgültige Rückkehr passen? Mein Code ist in C ++.

sind einige Hinweise zu schätzen.

Danke.

War es hilfreich?

Lösung

C ++ Zufallszahlen haben gleichmäßige Verteilung . Wenn Sie Zufallsvariablen eines anderen Verteilung seine mathematische Formel auf eine gleichmäßige Verteilung stützen müssen.

Wenn Sie nicht eine mathematische Formel für die Zufallsvariable haben Sie so etwas tun kann:

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
}

Andere Tipps

Dies kann als Alternative für zukünftige Referenzen, die dazu dienen, erhalten die Wahrscheinlichkeit, genaue Werte wie 99,999% oder 0,0001% Um Wahrscheinlichkeit (real Prozent) tun als solche:

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

Ich habe diese Methode verwendet, um sehr große gelaufenen Grids zu erstellen und es wirkt wie ein Zauber für Präzisionswerte.

Ich weiß nicht, ob ich das richtig verstehe, was Sie tun wollen, aber wenn Sie wollen nur sicherstellen, dass die Wahrscheinlichkeiten sind 70-10-10-10, gehen Sie wie folgt:

  • erzeugt eine Zufallszahl r in (1,2,3,4,5,6,7,8,9,10)
  • wenn r <= 7: float
  • wenn r == 8: kurz
  • wenn r == 9: Doppel
  • wenn r == 10: long

Ich glaube, Sie erkennen und das Muster auf beliebige Wahrscheinlichkeitswerte anpassen kann.

hat mmonem einen schönen probabilistischen Schalter, aber verschiedene Arten Rückkehr ist auch nicht trivial. Sie benötigen einen einzigen Typ, der angemessen kann (für Ihre Zwecke) kodieren alle Werte - boost Check-out :: alle, boost :: variant, Vereinigung oder konvertieren zum fähigsten Typ (wahrscheinlich doppelt), oder einen String.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top