C/C での正規分布を使用した乱数の生成
正規分布に従う乱数を生成する必要性は、さまざまなプログラミング アプリケーションでよく発生します。 。 C/C では、これを実現するために使用できる手法がいくつかあります。
広く採用されているアプローチの 1 つは、Box-Muller 変換です。この方法では、2 つの独立した一様乱数を生成し、数式を使用してそれらを変換して正規分布値を取得します。 Box-Muller 変換は数学的に厳密で、正確な結果が得られます。
C/C で Box-Muller 変換を実装する方法は次のとおりです。
#include <random> #include <cmath> // Generate a random number following a Gaussian distribution double normal_rand() { static double z1; static bool ready = false; // If z1 is not ready, generate two uniform random numbers if (!ready) { double u1 = std::uniform_real_distribution<double>(0, 1)(); double u2 = std::uniform_real_distribution<double>(0, 1)(); z1 = std::sqrt(-2 * std::log(u1)) * std::cos(2 * M_PI * u2); ready = true; } // Return z1 and mark it as used ready = false; return z1; }
上記の例では、std:: uniform_real_distribution は一様乱数を生成し、std::sqrt と std::cos は必要な数学的計算を実行します。
Box-Muller 変換を利用すると、 C/C の正規分布に従って乱数を生成する簡単で信頼性の高い方法が提供されます。この手法を採用することで、プログラマは Boost などの外部ライブラリの使用を回避し、標準 C ライブラリの機能を活用できます。
以上がC/C で正規分布乱数を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。