• ベストアンサー

乱数の発生確率(c++)

0,1の2値の乱数を発生させるとき、1の発生確率を例えば20%にするにはどのようにすればよいのでしょうか。 発生乱数を除算して余りを求めて・・・・の方法など試したのですが、うまいこといきませんでした。(プログラムが動かないのではなく結果が) 私の確率の認識が間違っているのかもしれませんが、この場合、1000個発生させた場合、300近く1が出れば良いということですよね。

質問者が選んだベストアンサー

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8477/18147)
回答No.1

普通の乱数発生器はなら0から1までの一様乱数を発生できるよね。 で、0から0.8までなら0を出力して、0.8から1までなら1を出力すれば、OK

その他の回答 (2)

回答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個の書き間違いでしょうか。

関連するQ&A