ホームページ >バックエンド開発 >C++ >私の乱数ジェネレーターが同じシーケンスを生成し続けるのはなぜですか?

私の乱数ジェネレーターが同じシーケンスを生成し続けるのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-09 00:01:10991ブラウズ

Why Does My Random Number Generator Keep Producing the Same Sequence?

同じシーケンスにリセットする乱数ジェネレータ

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 を使用すると、乱数ジェネレーターの状態がより予測不可能になり、より多様な結果が得られます。

詳細については、これらを参照してください。リソース:

  • http://www.dreamincode.net/forums/topic/24225-random-number-generation-102/
  • h ttp://www.dreamincode.net/forums/topic/29294-making-pseudo-random-number-generators-more-random/

以上が私の乱数ジェネレーターが同じシーケンスを生成し続けるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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