- ベストアンサー
乱数の発生確率(c++)
0,1の2値の乱数を発生させるとき、1の発生確率を例えば20%にするにはどのようにすればよいのでしょうか。 発生乱数を除算して余りを求めて・・・・の方法など試したのですが、うまいこといきませんでした。(プログラムが動かないのではなく結果が) 私の確率の認識が間違っているのかもしれませんが、この場合、1000個発生させた場合、300近く1が出れば良いということですよね。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
普通の乱数発生器はなら0から1までの一様乱数を発生できるよね。 で、0から0.8までなら0を出力して、0.8から1までなら1を出力すれば、OK
その他の回答 (2)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
回答No.3
// Visual C++ 10 でコンパイル/動作確認済 #include <iostream> #include <random> using namespace std; int main() { const int N = 10000; mt19937 rng; // メルセンヌ・ツイスタ bernoulli_distribution coin(0.2); // 確率0.2のベルヌイ分布 int true_count = 0; int false_count = 0; for ( int i = 0; i < N; ++i ) { if ( coin(rng) ) ++true_count; else ++false_count; } cout << true_count << ' ' << false_count << endl; }
- asuncion
- ベストアンサー率33% (2127/6289)
回答No.2
1000個のうち300個近く、というのは、200個の書き間違いでしょうか。