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; 

次に、これら 4 つの変数が関数 (A、B、C、D) に入力されます。このコードは、ループ内でいくつかのチェックと計算を実行します。

 }

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

Q:どうすれば状況を改善できるかについて何か提案はありますか?

4

1 に答える 1

3

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

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

何が起こっているかというと、反復ごとに乱数ジェネレーターを再初期化しているということです。私が思い出したようにtime、時間を秒数で返します。つまりtime(NULL)、乱数に同じシードを複数回シードすることになります。

とはいえ、これは一連の数字が繰り返されないことを保証するものではありません。ただし、重複の可能性ははるかに低くなります。

于 2012-04-19T16:12:53.290 に答える