0

私はここで分散確率乱数ジェネレーターと同じ問題を抱えていますが、c ++です。私はそれを実装する方法を知っていますが、私の質問は - その機能は現在のバージョンの c++ でビルドされていますか?

4

1 に答える 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 に答える