モンテカルロ法で統計問題を評価しようとしています。この問題では、乱数を生成し、それをcomms_reliability
という名前のベクトル配列に格納された固定確率数と比較しています。ベクトル配列に変数が1つしかないと仮定すると、乱数と信頼度を比較し、乱数が信頼度よりも大きい場合は結果を集計しています。しかし、ベクトル配列は2つの値を持つこともできます。この場合、2つの乱数を生成して2つの信頼性数値と比較します。両方の乱数が信頼性の数値より大きい場合、私はシナリオを集計しています。理論的には、これはベクトル配列内の多くの値に対して必要なだけ繰り返してもかまいません。しかし、想像力の欠如により、私は、for文が複数のif文に含まれている箇所をコード化する方法しか知りません 考えられる各シナリオについてこの実装では、同じコード行を複数回コピーする必要があります。また、次の配列ポイントを処理するためにこれらの行をコピーした回数に基づいて評価できる配列サイズはcommms_reliability
に制限されています。 if文が1つだけ必要な場合は、どうやってこれを行うことができますか?現在どのようにコード化しているかの例を以下に示します。私はあなたがcomms_reliability
のすべての要素がいくつかの基準を満たすことを確認するには、正しくあなたを理解していればC++で変数if文を評価する
int main(int argc, const char * argv[]) {
int sample_size = 1000000;
std::vector<float> comms_reliability = {0.6,0.6};
float tally = 0.0;
// rang() = random number generator
// if statement for comms_reliability array of size 1
if (comms_reliability.size() == 1) {
for (int i = 0; i < sample_size; i++){
if (rang() > comms_reliability[0]) tally = tally + 1.0;
}
}
// if statement 2 for comms_reliability array of size 2
if (comms_reliability.size() == 2) {
for (int i = 0; i < sample_size; i++){
if (rang() > comms_reliability[0] && rang() > comms_reliability[1]) tally = tally + 1.0;
}
}
// if statement 3 for comms_reliability array of size 3
if (comms_reliability.size() == 3) {
for (int i = 0; i < sample_size; i++){
if (rang() > comms_reliability[0] && rang() > comms_reliability[1] &&
rang() > comms_reliability[2]) tally = tally + 1.0;
}
}
を維持するためにフラグを使用します。さらに私は以前に存在しなかった新しいC++機能を学びました。 – Jon
私はあなたを助けることができてうれしいです:)私はC++標準ライブラリが提供する他の多くの「おいしさ」を見つけることができるオンラインドキュメントへのリンクを追加しました。 –