乱数の生成は、コンピューター プログラミングの重要な部分です。 C プログラミングでも乱数は非常に一般的で、データのシミュレーション、テスト データの生成、ゲーム開発などに使用できます。この記事では、C言語での乱数生成方法をいくつか紹介します。
擬似乱数生成アルゴリズムは、ほとんどのプログラムで使用される乱数生成方法であり、真の乱数ではなく、生成される擬似乱数です。特定の数学的アルゴリズムによる乱数。 C では、 rand 関数を使用して擬似乱数を生成できます。
rand 関数は、stdlib.h ヘッダー ファイルで定義されています。 0 から RAND_MAX の範囲の int 型の乱数を返します。RAND_MAX は stdlib.h ヘッダー ファイルで定義されており、その値は通常 32767 です。
サンプルコード:
#include <iostream> #include <ctime> #include <cstdlib> using namespace std; int main() { // 设置随机数种子 srand(time(0)); // 生成10个随机数 for(int i = 0; i < 10; i++) { cout << rand() << endl; } return 0; }
上記のコードでは、srand関数を使用して乱数シードを設定し、time(0)で現在時刻の秒数を取得できるので、プログラムの実行結果は毎回異なります。次に、for ループを使用して 10 個の乱数を生成し、画面に出力します。
rand 関数は呼び出されるたびに一意の乱数を返しますが、複数回呼び出される場合、乱数間にはある程度の相関関係があることに注意してください。したがって、rand 関数を使用して大量の乱数を生成する場合は、難読化のために他の方法を使用する必要があります。
真の乱数とは、物理現象を通じて生成される乱数を指します。たとえば、地震波データや光電特性などは、ハードウェア デバイスを介して収集できますが、これらのハードウェア デバイスは非常に複雑です。高価ですが、ほとんどのアプリケーションでは、擬似乱数生成アルゴリズムを使用するだけで十分です。
ただし、高セキュリティの乱数を必要とする一部のアプリケーション シナリオでは、データのセキュリティと機密性を保護するために、真の乱数を使用する必要があります。この場合、外部デバイスを使用して真の乱数を提供できます。たとえば、真の乱数は、サイコロを振る、コインを投げる、くじ引きなどによって生成できますが、この方法は非効率であるだけでなく、生成される乱数の種類も限られます。
より一般的な方法は、乱数発生器 (RNG) と呼ばれる物理デバイスを通じて真の乱数を生成することです。予測できない物理プロセスや数学的手順を収集することで乱数を生成すると同時に、追加のセキュリティ機能も提供します。ただし、真の乱数生成器を使用するコストは、擬似乱数生成アルゴリズムを使用する場合よりもはるかに高くなります。
C 11 は、2 つの部分を含む新しい乱数ライブラリを提供します。1 つは擬似乱数生成器で、より優れたアルゴリズムが複数含まれています。2 つ目は、真の乱数ジェネレータ。システムの特別に生成されたハードウェア機能にアクセスし、真の乱数を返すことができます。
C 11 の乱数生成ライブラリには次のものが含まれます:
C 11 で乱数生成ライブラリを使用する場合、ヘッダー ファイル Random をインクルードする必要があります。また、uniform_int_distribution を使用できます。乱数の範囲と種類を制御するuniform_real_distribution関数。
サンプルコード:
#include <iostream> #include <random> using namespace std; int main() { // 以当前时间作为种子 default_random_engine engine(time(nullptr)); // uniform_int_distribution:以等概率生成min到max范围内的整数 uniform_int_distribution<int> distribution(0, 100); cout << distribution(engine) << endl; // uniform_real_distribution:以等概率生成min到max范围内的浮点数 uniform_real_distribution<double> r_distribution(0, 100); cout << r_distribution(engine) << endl; return 0; }
上記のコードでは、default_random_engine を使用して乱数シードを生成し、生成される整数乱数と浮動小数点乱数の範囲をそれぞれuniform_int_distributionとuniform_real_distributionで指定します。最後に、エンジン関数を呼び出して乱数を生成します。
上記は、C での一般的な乱数生成方法のいくつかです。アプリケーション シナリオが異なれば、異なる乱数生成方法が必要になるため、実際の状況に応じて適切な方法を選択する必要があります。実際のプログラミングでは、疑似乱数と真の乱数の利点を組み合わせ、いくつかの高度な乱数生成方法を使用して、プログラムの効率とセキュリティを向上させることができます。
以上がC++ での乱数生成の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。