ホームページ > バックエンド開発 > C++ > C/C で正規分布乱数を生成するにはどうすればよいですか?

C/C で正規分布乱数を生成するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-27 16:51:12
オリジナル
292 人が閲覧しました

How to Generate Normally Distributed Random Numbers in C/C  ?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート