2012-04-19 4 views
2

4つの数字のセットに対してランダムスキャンを実行するコードを作成しています。私は10000ポイント(何百万人も後で)をスキャンしたいと思います。rand()によってポイントの集合が再度選択されないようにする方法

int numPoints = 10000; 
double A,B,C,D; 
for (i=0; i<=numPoints1;i++) { 

       srand (time(NULL)); 
       A = rand() % 500 + 100; 
       B = rand() % 500 + 100; 
       C = rand() % 100 - 100;   
       D = rand() % 5 + 2.5; 

そしてこれら四つの変数は、関数(A、B、C、D)に供給されている:私はちょうどので、ここで関連する部分だ)(RANDについて学びました。 コードは、ループ内でいくつかのチェックと計算を実行します。

} 

しかし、出力ファイルで何度も、A、B、C、Dの同じセットが選択されていることに気付きました。

Q:どうすれば状況を改善できますか?

答えて

3

srandへの呼び出しをループから移動する必要があります。このように:

srand(time(NULL)); 
for (i = 0; i <= numPoints1; i++) 
{ 
    ... 
} 

何が起こっているかは、繰り返しごとに乱数ジェネレータを再初期化していることです。思い出したように、timeは時間を秒数で返します。したがって、time(NULL)は1秒に1回しか変更されません。つまり、同じシードの乱数に複数回シードします。

これは、一連の数字が繰り返されないことを保証するものではありません。ただし、重複はほとんどありません。

+0

これは機能しました。おかげで束:D – stupidity

関連する問題