0 から 3 の範囲で乱数を取得しようとしています。このようなコードを使用すると、次のようになります。
#include <cstdlib>
int index = rand() % 3;
しかし、常に同じ結果が得られます: 1 1 0 1
.
私が間違っていることは何ですか?いつも同じ数字。結果は、各コンパイル後または実行時に値を変更する必要がありますか?
広告忘れた
#include <ctime>
srand(time(NULL))
プログラムの開始時に。
これにより、現在の時刻に基づいてプログラムを実行するたびに新しいシードが生成されます。
結果は、各コンパイル後または実行時に値を変更する必要がありますか?
実際には、いいえ、結果は特定のシードに対して同じであると想定されています。シードを明示的に設定しない場合、srand()
実行するたびに結果は同じになります。毎回異なる結果を得るには、時間など、完全に決定論的ではないものから派生したものを使用してシードを設定する必要があります(シードの設定に使用される瞬間の正確な時刻がわからないという意味で決定論的ではありません) 。