ホームページ > バックエンド開発 > C++ > rand() 関数が単一の関数呼び出し内で同じ値を返すのはなぜですか?

rand() 関数が単一の関数呼び出し内で同じ値を返すのはなぜですか?

Susan Sarandon
リリース: 2024-12-25 11:37:07
オリジナル
1010 人が閲覧しました

Why Does My rand() Function Return Identical Values Within a Single Function Call?

関数内で同じ値を返すランダム関数

rand() 関数が関数内で呼び出されたときに同じ値を生成するという問題が発生しました。単一機能。この問題を解決するには、問題をさらに深く掘り下げて解決策を探ってみましょう。

問題を理解する

関数 PullOne() は std::srand(time (0)) 乱数発生器を初期化する関数。この初期化では、現在時刻に基づいてシード値が割り当てられます。ただし、関数内で srand() を呼び出すと、関数が呼び出されるたびに乱数ジェネレーターを効果的にリセットできます。これにより、同じ一連の乱数が生成されます。

解決策

PullOne() 内で真にランダムな値を生成するには、乱数ジェネレーターを 1 回だけ初期化する必要があります。 、関数呼び出しの前に。これにより、関数が呼び出されるたびに一意の乱数シーケンスが生成されるようになります。

これを実現するには、次のようにコードを変更します。

// Initializing the random number generator
std::srand(time(0));

string PullOne()
{
    string pick;
    string choices[3] = {"BAR", "7", "cherries"};

    pick = choices[(std::rand() % 3)];
    return pick;
}
ログイン後にコピー

srand() を初期化することで、 PullOne() の外部では、これが 1 回だけ呼び出され、乱数ジェネレーターが適切にシードされていることを確認します。この変更により、PullOne() への各呼び出しで真にランダムな結果が生成され、pull_1、pull_2、および pull_3 が個別の値になることが保証されます。

以上がrand() 関数が単一の関数呼び出し内で同じ値を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート