C/C での正規分布乱数の生成
C または C で正規分布に従う乱数を生成することは頻繁に行われるタスクですさまざまな計算および統計アプリケーションで使用されます。これは、ボックス-ミュラー変換を使用すると効果的に実現できます。ボックス-ミュラー変換は、2 つの一様乱数を利用して正規分布乱数のペアを生成する広く採用されている手法です。
ボックス-ミュラー変換は、次のような単純な数式に依存しています。
x = sqrt(-2 * ln(u1)) * cos(2 * pi * u2) y = sqrt(-2 * ln(u1)) * sin(2 * pi * u2)
ここで、u1 と u2 は、範囲 [0, 1] で生成された 2 つの独立した一様乱数です。これら 2 つの方程式は、2 つの独立した確率変数 x と y を定義し、平均ゼロと単位分散の正規分布に従います。
このメソッドを C/C で実装するには、次の手順を実行できます。
double rand0to1() { return rand() / (RAND_MAX + 1.0); }
pair<double, double> box_muller() { double u1 = rand0to1(); double u2 = rand0to1(); double x = sqrt(-2.0 * log(u1)) * cos(2.0 * M_PI * u2); double y = sqrt(-2.0 * log(u1)) * sin(2.0 * M_PI * u2); return {x, y}; }
この方法は効果的です。外部ライブラリを必要とせずに、正規分布に従う乱数を生成します。
以上がBox-Muller 変換を使用して C/C で正規分布乱数を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。