1

double、float、short、long のランダム値を生成する関数がいくつかあります。データ型を渡す別の関数があり、ランダムな値を返す必要があります。次に、渡されたデータ型に基づいて、その関数で戻り値を選択する必要があります。たとえば、float を渡す場合は、次のものが必要です。

リターンがフロートである確率は 70%、ダブル、ショート、またはロングである確率はそれぞれ 10% です。対応するランダム値を生成するために他の関数を呼び出すことはできますが、最終的なリターンの確率的重みにどのように適合させるのですか? 私のコードは C++ です。

いくつかの指針をいただければ幸いです。

ありがとう。

4

4 に答える 4

5

C++の乱数は一様分布です。別の分布の確率変数が必要な場合は、その数式を一様分布に基づく必要があります。

確率変数の数式がない場合は、次のようにすることができます。

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
}
于 2010-08-26T05:59:38.673 に答える
2

あなたが何をしたいのかを正しく理解しているかどうかはわかりませんが、確率が70-10-10-10であることを確認したいだけの場合は、次のようにしてください。

  • r(1,2,3,4,5,6,7,8,9,10)で乱数を生成します
  • if r <= 7:float
  • 場合r == 8:短い
  • if r == 9:double
  • 場合r == 10:長い

パターンを認識し、任意の確率値に適応させることができると思います。

于 2010-08-26T06:00:26.610 に答える
1

mmonem には優れた確率的スイッチがありますが、異なる型を返すことも簡単ではありません。任意の値を適切に (目的のために) エンコードできる単一の型が必要です。boost::any、boost::variant、union をチェックするか、最も有能な型 (おそらく double) または文字列表現に変換します。

于 2010-08-26T06:24:33.843 に答える