ホームページ >バックエンド開発 >C++ >乱数ジェネレーターが1つの一意の数だけを生成するのはなぜですか?

乱数ジェネレーターが1つの一意の数だけを生成するのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-02-03 08:31:09566ブラウズ

Why Does My Random Number Generator Only Produce One Unique Number?

乱数ジェネレーターのトラブルシューティングは、繰り返される数値を生成します

乱数ジェネレーター(RNG)は、ループを使用しているにもかかわらず、単一の一意の数字のみを生成しているようです。 デバッグはループの実行中に異なる数値を明らかにしますが、完了すると、すべての配列要素が同じ値を保持します。

問題は、各ループ反復内に新しい

インスタンスを作成することに起因します。 Randomはシステムクロックを使用してシードされることが多いため、急速に実行されたループは、同じシードでRandomオブジェクトを繰り返し初期化し、同一の出力につながる場合があります。 Randomソリューション:単一の共有インスタンス

修正には、すべての呼び出しにわたって単一の静的

インスタンスを使用することが含まれます。これにより、一貫した状態の更新が保証され、繰り返しの種子値が防止されます。 マルチスレッドシナリオを安全に処理するために、アクセスを同期するためにロックが使用されています。

ここに補正されたRandom関数:

があります

RandomNumber単一の

インスタンスを使用して
<code class="language-csharp">private static readonly Random random = new Random();
private static readonly object syncLock = new object();

public static int RandomNumber(int min, int max)
{
    lock (syncLock) { // Thread-safe access
        return random.Next(min, max);
    }
}</code>
と同期することにより、RNGは内部状態を維持し、ループ内の各コールで一意の乱数を生成します。

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

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