random number generator c
このチュートリアルでは、C ++で乱数を生成するための関数rand()およびsrand()の使用法について詳しく説明します。
多くの場合、ランダムなイベントを必要とするシミュレーションやゲーム、その他のアプリケーションを作成するために、アプリケーションで乱数を使用する必要があります。
例えば、 サイコロのゲームでは、ランダムなイベントが発生することなく、サイコロを投げるたびに同じ側がポップアップするため、望ましくない結果が生じます。
したがって、乱数ジェネレーターを自由に使用できるようにする必要があります。物理環境では、ランダムなイベントを生成できますが、コンピューターに関しては不可能です。
=> Easy C ++トレーニングシリーズをお読みください。
これは、コンピューター内のすべてがバイナリ、つまり0または1(trueまたはfalse)であり、その間に何もないためです。したがって、コンピューターは通常、予測可能なイベントを生成し、ランダムなイベントを生成することはできません。
代わりに、コンピューターはを使用して行われるランダム性をシミュレートします 疑似乱数ジェネレーター(PRNG) 。 C ++には乱数ジェネレーターがあり、多くのアプリケーションで使用できます。
このチュートリアルでは、C ++で乱数を生成するための関数/アプローチについて詳しく説明します。
学習内容:
- C ++の疑似乱数ジェネレーター(PRNG)
- C ++でのrandおよびsrand関数
- rand()とsrand()の違い
- C ++ランダムフロート
- 0から1までのC ++乱数
- 1から10までのC ++乱数
- よくある質問
- 結論
- 推奨読書
C ++の疑似乱数ジェネレーター(PRNG)
一般に、疑似乱数ジェネレータ(PRNG)は、シードまたは開始番号を取得し、数学演算を使用してシードとは異なる他の番号に変換するプログラムとして定義できます。
このプロセスは、最後に生成された番号を毎回取得することによって繰り返し実行されます。生成される番号は、前の番号とは無関係です。したがって、このプログラムは、ランダムに見える一連の数値を生成することができます。
C ++言語には、疑似乱数ジェネレーターが組み込まれており、乱数の生成に使用できる2つの関数rand()とsrand()が用意されています。
これら2つの機能について詳しく説明しましょう。
テクニカルサポートエンジニアの面接の質問と回答
C ++でのrandおよびsrand関数
srand()
関数プロトタイプ: void srand(unsigned int seed);
パラメーター: シード–疑似乱数ジェネレーターアルゴリズムによってシードとして使用される整数値。
戻り値: なし
説明: srand関数は、「ランダムシード」と呼ばれるパラメータを使用して疑似乱数のシーケンスを初期化するために使用されます。これにより、rand関数の出力がランダムに見えます。それ以外の場合、rand()関数の出力は呼び出すたびに同じになります。
したがって、乱数ジェネレーターにsrand()関数をシードすると、srandに渡された引数値に依存するポイントからジェネレーターが起動します。システム時刻で乱数ジェネレーターを設定した場合 例えば、 rand()関数を最初に呼び出す前に、プログラムを実行するたびに乱数が生成されます。
通常、srand()関数を呼び出す必要があるのは、乱数を生成するたびではなく、rand()関数を呼び出す前に1回だけであることに注意してください。
ランド()
関数プロトタイプ: int rand(void);
パラメーター: なし
戻り値: 0からRAND_MAXまでの整数値。
説明: rand()関数は、シーケンス内の次の乱数を生成します。生成される数値は、0からRAND_MAXまでの疑似乱数整数です。 RAND_MAXは、通常値32767に設定されるヘッダーの定数です。
#include #include #include int main() { std::srand(static_cast(std::time(nullptr))); for (int count=1; count <= 100; ++count) { std::cout << std::rand() << ' '; // display 5 random numbers per row if (count % 5 == 0) std::cout << '
'; } return 0; }
出力:
上記のプログラムでは、srand関数のシードとしてシステムクロックを指定することにより、最初の100個の乱数を生成しました。このプログラムでは、srand関数とrand関数の両方を使用しました。シードとしてのシステムクロックのため、プログラムを実行するたびに生成される出力が異なることに注意してください。
rand()とsrand()の違い
行() | srand() |
---|---|
乱数を生成するために使用されます。 | rand()関数で使用されるPRNGをシードします。 |
乱数を生成したい回数だけ呼び出されます。 | 乱数ジェネレーターを確認するために1回だけ呼び出されます。 |
引数を取りません。 | 乱数ジェネレーターをシードするために使用されるパラメーターを取ります。 |
呼び出されるたびに乱数のシーケンスを返します。 | 値を返しません。 |
C ++ランダムフロート
上で見たrand()関数は、デフォルトで整数値を返し、特定の場合にオーバーフローを引き起こす可能性があります。したがって、floatまたはdouble値を使用できます。 rand()関数の戻り値を「float」にキャストすることで、float乱数を生成できます。
したがって、以下は、float 0.0から1.0(両方を含む)の間の乱数を生成します。
cout< 同様に、以下の行は1.2から3.4の間の乱数を生成します
cout<<1.2 + static_cast (rand()) / ( static_cast (RAND_MAX/(3.4-1.2)));
以下の後続の例では、ランダムフロートを使用して出力を生成します。
0から1までのC ++乱数
srand()およびrand()関数を使用して、0から1までの乱数を生成できます。rand()関数の出力をfloatまたはdoubleの10進値にキャストする必要があることに注意してください。
rand()関数のデフォルトの戻り値、つまり整数は、分数である0から1までの乱数を表示するには不十分です。
以下に示すC ++プログラムは、0から1までの最初の5つの乱数を表示します。
どのプログラムがepsファイルを開くことができるか
#include #include using namespace std; int main() { cout<<'Random numbers generated between 0 and 1:'< 出力 :

プログラムの出力は、分数である0から1までの乱数であることがわかります。
rand()関数の戻り値をfloatまたはdoubleにキャストしない場合、乱数として0を取得します。
1から10までのC ++乱数
次の例は、1から10までの乱数を生成することです。以下は、乱数を生成するC ++プログラムです。
システムクロックを使用してsrand関数を呼び出してから、モジュール10の演算子を使用してrand関数を呼び出します。
#include #include #include using namespace std; int main() { srand(time(0)); // Initialize random number generator. cout<<'Random numbers generated between 1 and 10:'< 出力:

上記のプログラムでは、1から10までの最初の10個の乱数を生成します。プログラムが実行されるたびに、srand関数が呼び出されるため、異なる数のセットが生成されることに注意してください。
よくある質問
Q#1)C ++のランダム関数のヘッダーファイルは何ですか?
回答: 乱数、rand、srandを生成する関数は次のように定義されています。< cstdlib > C ++のヘッダー。
Q#2)C ++のRand_maxとは何ですか?
回答:RAND_MAX は、一般に値32767に設定されるヘッダー内の定数です。疑似乱数ジェネレーター(PRNG)は、0からRAND_MAXまでの乱数を生成します。
Q#3)ランダム関数はどのように機能しますか?
回答: C ++は、2つのランダム関数をサポートしています。 srand()およびrand()。 関数srand()は、提供された最初のシードに応じて乱数シーケンスを生成するrand()関数によって使用される乱数ジェネレーターをシードします。
Q#4)時間とともにどのように売っていますか?
回答: srand関数は、rand()関数で使用される疑似乱数ジェネレーター(PRNG)をシードします。時間(0)の呼び出しの結果をシードとして使用するのが標準的な方法です。このtime関数は、1970年1月1日UTC(現在のUNIXタイムスタンプ)の00:00時間からの秒数である値を返します。
したがって、シードの値は毎秒変化します。したがって、srandがtime関数で呼び出されるたびに、新しい乱数のセットが生成されます。
結論
このチュートリアルでは、乱数の生成について詳しく説明しました。プログラミング言語または一般的なコンピューターは、予測出力を提供するように設計されているため、乱数を生成しません。したがって、ランダム性をシミュレートする必要があります。
ランダム性をシミュレートするために、C ++に組み込まれている疑似乱数ジェネレーター(PRNG)を使用します。したがって、rand()とsrand()の2つの関数を使用して、C ++で乱数を生成できます。
関数srand()は、乱数を生成するためのシードを提供するために使用され、rand()関数は、シーケンス内の次の乱数を生成します。
=> ここでC ++トレーニングシリーズ全体を探してください。
推奨読書