私は擬似乱数を生成するプログラムを書くという本の演習をしています。私は簡単に始めました。C++でrand()関数を使用する正しい方法は何ですか?
#include "std_lib_facilities.h"
int randint()
{
int random = 0;
random = rand();
return random;
}
int main()
{
char input = 0;
cout << "Press any character and enter to generate a random number." << endl;
while (cin >> input)
cout << randint() << endl;
keep_window_open();
}
私は、プログラムが実行されるたびに同じ「ランダム」出力が存在することに気付きました。だから私は乱数発生器を調べ、randint()にこれを最初に含めてシードしようと決めました。
だけで何度も同じ番号を生成しsrand(5355);
(私はそれを実現するために、今愚かな感じ。)
だから、私は賢いことと、このように種子を実装しようと思いました。
srand(rand());
プログラムとしてこの基本的には同じでしたが、最初の場所でなかったが、数の異なるセット出力(RAND(によって生成された第1の数ので理にかなっている)は、常に41である)
私はこれよりランダムにあることを確認するために考えることができる唯一の事:
- は、ユーザの入力に番号を持っており、シードとして(実装するのは簡単だろうが、これは最後の手段である)という設定 OR
- 何とかして、シードをコンピュータ時計やその他の絶えず変化する番号に設定する必要があります。
私は頭の中で私は今停止する必要がありますか?オプション2は実装が難しいですか?他のアイデア?
ありがとうございます。
+1これは標準的な方法です。 – SingleNegationElimination
* nix環境にいる場合は、/ dev/randomでも読み込むことができます。私はTokenに同意しますが、これはsrandをtime関数で設定する標準的な方法です。 – Suroot
また、一度呼び出すだけなので、上部のメインのsrand()を呼び出してください。新しい番号を生成するたびに呼び出さないでください。 – MahlerFive