質問:
乱数を簡単に生成するにはどうすればよいですかBoost を使用せずに C または C で正規分布に従う
答え:
ボックス-ミュラー変換
ボックス-ミュラー変換は、生成するために広く使用されている方法です。一様乱数発生器からの正規分布数。ガウス分布に正確に従う値が生成されます。
ボックス-ミュラー変換の数式は次のとおりです:
x = sqrt(-2 * log(U1)) * cos(2 * π * U2) y = sqrt(-2 * log(U1)) * sin(2 * π * U2)
ここで:
実装:
C/C で Box-Muller 変換を実装するには、次を使用できます。コード:
#include <cmath> #include <random> double box_muller() { std::random_device rd; // Seed the random number generator with a system clock seed std::default_random_engine rng(rd()); std::uniform_real_distribution<double> dist(0.0, 1.0); double U1 = dist(rng); double U2 = dist(rng); double x = sqrt(-2 * log(U1)) * cos(2 * M_PI * U2); return x; }
使用法:
正規分布乱数を生成するには、単純に box_muller() 関数を呼び出します:
double random_number = box_muller();
random_number の値は、平均 0 と標準偏差のガウス分布確率変数になります。 1.
注:
以上がブーストなしでC/Cで正規分布乱数を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。