私はここで分散確率乱数ジェネレーターと同じ問題を抱えていますが、c ++です。私はそれを実装する方法を知っていますが、私の質問は - その機能は現在のバージョンの c++ でビルドされていますか?
質問する
2130 次
1 に答える
3
完全を期すために、質問に答えます。
この分布は、C++11 の乱数生成ライブラリを使用して生成できます。これには、最初に乱数エンジン (ここでは を使用std::mt19937
) をシードし、次にそのエンジンをstd::discrete_distribution
乱数分布で使用する必要があります。
std::discrete_dstribution
のコンストラクターは、一連の重みまたは一連の重みの反復子範囲のいずれかを取りますinitializer_list
。生成された数値は、一連の重みの対応するインデックスに従って重み付けされます。つまり{10, 5, 1}
、重みがある場合、確率で0
生成されます。10/(10 + 5 + 1) = 0.625
次のコードは、他の質問に対する解決策を示しています。
std::random_device device;
std::mt19937 engine(device()); // Seed the random number engine
std::discrete_distribution<> dist({150, 40, 15, 3}); // Create the distribution
// Now generate values with:
std::cout << (dist(engine) + 1) << std::endl;
于 2013-02-23T11:28:01.787 に答える