6

次のプログラムを受講してください。

#include <cstdlib>
using std::rand;

#include <iostream>
using std::cout;

int main()
{
    cout << rand() << ' ' << rand() << ' ' << rand() << '\n';
}

randを使用してシードが変更されない限り、同じ値を生成するためsrand、これは3つの同じ数値を生成するはずです。
例えば

567 567 567

ただし、このプログラムを実行すると、3つの異なる値が表示されます。
例えば

6334 18467 41

プログラムが(コンパイルされて)再度実行されると、同じ3つの数値が生成されます。srandとは異なる結果を得る前に、シードを変更するために使用する必要はありませんrandか?これは私のコンパイラ/実装が私に有利にしようとしているだけですか?

OS:Windows XP
コンパイラ:GCC 4.6.2
ライブラリ:MinGW

編集:を使用しようとするとsrand、これが1のシードからの結果であることがわかりました(これはデフォルトになっていると思います)。

4

2 に答える 2

4

複数回呼び出すと、呼び出すたびに異なる乱数rand()が意図的に生成されます。

プログラムがsrand()実行ごとに異なる値で呼び出す場合を除いて、シーケンスは実行ごとに同じになります。

srand()時間とともに使用して、シーケンス全体を毎回異なるものにすることができます。既知の値で呼び出してシーケンスをリセットすることもできsrand()ます。これはテストに役立ちます。

rand()およびsrand()のドキュメントを参照してください。

于 2012-04-05T16:22:45.940 に答える
4

を呼び出すたびにrand()、常に異なる乱数が生成されます。

シードは、実際に作成される乱数のシーケンスを決定します。別のシードを使用すると、さらに3つの乱数が取得されますが、特定のシードに対して常にこれらの3つの番号が取得されます。

同じ番号を複数回使用したい場合は、1回呼び出しrand()て、変数に保存します。

于 2012-04-05T16:23:44.427 に答える