質問:
乱数を簡単に生成するにはどうすればよいですかBoost を使用せずに C または C で正規分布に従うライブラリ?
答え:
ボックス-ミュラー変換
ボックス-ミュラー変換は、生成するために広く使用されている方法です。一様乱数発生器からの正規分布数。ガウス分布に正確に従う値が生成されます。
ボックス-ミュラー変換の数式は次のとおりです。
x = sqrt(-2 * log(U1)) * cos(2 * π * U2) y = sqrt(-2 * log(U1)) * sin(2 * π * U2)
ここで:
実装:
C/C で Box-Muller 変換を実装するには、次のコードを使用できます:
#include#include 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 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.
注:
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3