ホームページ  >  記事  >  バックエンド開発  >  C++の乱数関数の詳しい解説

C++の乱数関数の詳しい解説

王林
王林オリジナル
2023-11-18 16:08:271559ブラウズ

C++の乱数関数の詳しい解説

C の乱数関数の詳細な説明

乱数はコンピューター プログラミングにおいて重要な役割を果たしており、ランダム イベントのシミュレーションや乱数シーケンスの生成などに使用できます。 . さまざまなアプリケーション。 C 言語には、開発者が乱数を生成して適用できるようにする一連の乱数関数が用意されています。この記事ではC言語の乱数関数の使い方と注意点を詳しく紹介します。

C では、乱数関数には主に、擬似乱数生成関数と補助乱数関数の 2 つの側面が含まれます。

まず、C の疑似乱数生成関数を紹介します。 C 11 で導入された乱数ライブラリ <random></random> は、より柔軟で効率的な擬似乱数生成関数を提供します。これには主に次の重要なクラスが含まれています:

  1. std::random_device: このクラスは実際の乱数シードを生成するために使用され、ハードウェア乱数ジェネレータまたはハードウェア乱数ジェネレータによって操作できます。システムが提供する乱数インターフェースを取得できます。
  2. std::seed_seq: このクラスは、乱数シード シーケンスを生成するために使用されます。複数のシード値を組み合わせてシード シーケンスを生成し、より複雑な乱数を提供できます。生成方法。
  3. std::mt19937std::mt19937_64: これら 2 つのクラスは、メルセンヌ回転アルゴリズムを使用して高品質の疑似乱数を生成する疑似乱数エンジンです。乱数、シーケンス。 std::mt19937ステータスとして 32 ビット整数を使用します。std::mt19937_64ステータスとして 64 ビット整数を使用します。
  4. std::uniform_int_distributionstd::uniform_real_distribution: これら 2 つのクラスは、一様に分散された乱数ディストリビュータです。 std::uniform_int_distribution は一様分布整数乱数の生成に使用され、std::uniform_real_distribution は一様分布実数乱数の生成に使用されます。

これらのクラスを使用して、擬似乱数を生成します。まず、std::random_device を使用して真の乱数シードを生成する必要があります。次に、擬似乱数エンジン std::mt19937 または std::mt19937_64 を介してシード初期化を使用し、ディストリビューター std::uniform_int_distribution を使用します。または std::uniform_real_distribution 乱数を生成します。

以下は、一様に分布した整数乱数を生成する方法を示すサンプル コードです:

#include <iostream>
#include <random>

int main() {
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dis(1, 100);

    for (int i = 0; i < 10; ++i) {
        std::cout << dis(gen) << " ";
    }

    return 0;
}

上記のコードを実行すると、1 ~ 100 の範囲の 10 個のランダムな整数が出力されます。

疑似乱数生成関数に加えて、C では乱数をより便利に処理するための補助乱数関数もいくつか提供されています。

  1. std::rand: この関数は、0 から RAND_MAX までの擬似乱数整数を生成します。デフォルトは RAND_MAX# です。 ##値は 32767 です。 rand 関数は通常、std::srand を使用して乱数シードを設定しますが、比較的低品質の乱数しか生成できないことに注意してください。
  2. std::srand: この関数は、擬似乱数生成器のシード値を設定するために使用されます。一般に、システム時刻をシード値として使用すると、プログラムによって生成される乱数シーケンスが実行のたびに異なることを確認できます。
  3. std::shuffle: この関数はシーケンスをランダムにシャッフルするために使用されます。 2 つのイテレータ パラメータを受け取り、現在の擬似乱数ジェネレータに従ってシーケンスを再配置します。
補助乱数関数は通常、C スタイルの関数 (

randsrand など) の形式で存在し、より単純で直接的なものになります。使用。ただし、これらの関数によって生成される乱数は品質が低いため、実際の開発での使用はお勧めできません。対照的に、C++11 が提供する乱数ライブラリを使用すると、より柔軟で効率的になります。

要約すると、C は、擬似乱数生成関数と補助乱数関数の両方を含む一連の乱数関数を提供します。中でも擬似乱数生成機能はより柔軟かつ効率的に利用できるため、実際の開発での利用を推奨します。乱数を生成するためのより簡単かつ直接的な方法が必要な場合は、補助乱数関数の使用を検討してください。乱数関数を使用する場合は、生成される乱数シーケンスが高品質で独立性を持つように、適切な乱数シードを設定することに注意する必要があります。

この記事の導入が、読者が C の乱数関数をよりよく理解し、応用できるようになれば幸いです。乱数関連の関数を使用する場合は、その柔軟性と効率性を最大限に活用するために、C 11 で導入された乱数ライブラリを使用することをお勧めします。

以上がC++の乱数関数の詳しい解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。