特定の確率に基づいて値を取得する方法
-
01-10-2019 - |
質問
ダブル、フロート、短い、長いランダムな値を生成する機能がいくつかあります。データ型を渡す別の関数があり、ランダムな値を返す必要があります。次に、その関数で、渡されたデータ型に基づいて戻り値を選択する必要があります。たとえば、フロートを通過した場合、必要です:
リターンがフロートであるという確率は70%であり、リターンが2倍、短い、または長いという確率はそれぞれ10%です。対応するランダム値を生成するために他の関数を呼び出すことができますが、最終的なリターンのために確率的な重みに適合するにはどうすればよいですか?私のコードはC ++です。
いくつかのポインターが高く評価されています。
ありがとう。
他のヒント
これは、99.999%または0.0001%などの正確な値の確率を得るために確率(実際の割合)を取得する可能性を得ることができる将来の参照の代替として役立ちます。
//70%
double probability = 0.7;
double result = rand() / RAND_MAX;
if(result < probability)
//do something
この方法を使用して、非常に大きな浸透したグリッドを作成しましたが、精密値の魅力のように機能します。
あなたが何をしたいのかを正しく理解しているかどうかはわかりませんが、確率が70-10-10-10であることを保証したい場合は、次のことを行います。
- 乱数を生成します
r
(1,2,3,4,5,6,7,8,9,10) - もしも
r <= 7
: : 浮く - もしも
r == 8
: : 短い - もしも
r == 9
: :ダブル - もしも
r == 10
: : 長さ
パターンを認識し、任意の確率値に適応できると思います。
Mmonemには素晴らしい確率的スイッチがありますが、異なるタイプを返すことも些細なことではありません。 (目的のために)適切に値をエンコードできる単一のタイプが必要です - boost :: any、boost :: variant、union、または最も有能なタイプ(おそらく二重)に変換するか、文字列表現を変換してください。
所属していません StackOverflow