rand()%(range)を使って乱数を生成しようとしています。 は、ここに私のコードが設定され方法は次のとおりです。rand()を使って乱数を生成する
srand(time(NULL));
someClass *obj = new someClass(rand()%range1,rand()%range2... etc); // i.e. a number of random numbers one after the other
私はこれを実行するたびに、それは同じ番号を生成)(ランドへのすべての呼び出しようです。私はせずにそれをやってみました:(編集:すべてのrand()が最後に編集を読んで、それはそうと同じ番号を生成しません)
srand(time(NULL));
、その後、プログラムの実行ごとに同じ結果が得られます。
また、rand()へのすべての呼び出しはコンストラクタ内にあるので、私は本当にそれを常に再シードします。私は事前にコンストラクタに送信されたすべてのオブジェクトを作成し、その間に乱数ジェネレータを再配置することができると思いますが、それは控えめな解決策のようです。
さまざまな乱数を生成するにはどうすればよいですか?
編集:これはループ内でたくさんのオブジェクトを作成していたためです。ループが繰り返されるたびにsrand(time(NULL))が再シードされ、シーケンスがリセットされました(時間(NULL)それで、それ以降のすべてのオブジェクトは非常に似た性質を持っています。
がrandom_r http://www.ellipsix.net/blog/2009/3/how-to-use-random-r.htmlを使用してみてくださいかなりうまく動作状況、たとえばです。そうすれば、一度シードすることができます。 – Mikhail
乱数ジェネレータは最初に播種する必要があります。もっとコードを投稿できますか?あなたは 'rand()%range1 = rand()%range2 = ... = rang()%rangen'と言っているようですが、そうではありません。 'range1'とは何ですか? – MGwynne