同じシーケンスにリセットする乱数ジェネレータ
rand() 関数を利用するプログラムを実行するたびに、次のことに気づくかもしれません。同一の一連の数値を生成します。これは、乱数ジェネレーターのシードが初期化されていないために発生します。
さらに予測不可能な結果を生成するには、srand((unsigned int)time(NULL)) を使用して乱数ジェネレーターのシードを設定します。この関数は現在時刻をシードとして使用し、生成される数値の多様性を高めます。次のコードを考えてみましょう:
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; int random(int low, int high) { if (low > high) return high; return low + (rand() % (high - low + 1)); } int main() { srand((unsigned int)time(NULL)); cout << random(2, 5) << endl; return 0; }
rand() 関数は本質的にランダムではなく、数学的変換を利用します。 rand() を呼び出すたびに、シードまたは以前の乱数に基づいて結果が生成され、明示的な初期化を行わずに予測可能なシーケンスが作成されます。真にランダムな値 (現在の時刻など) を持つ srand を使用すると、乱数ジェネレーターの状態がより予測不可能になり、より多様な結果が得られます。
詳細については、これらを参照してください。リソース:
以上が私の乱数ジェネレーターが同じシーケンスを生成し続けるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。