0

乱数のバッチを生成する必要がある典型的な状況があります。各パスで 100 個の乱数を生成するループを使用しました。

for(int i=0; i<npasses; i++)
{
   srand(time(NULL)); //Initialize seed

   for(int j=0; j<100; j++)
      printf("%d ", rand()%10);

   printf("\n"); //New line after 100 numbers
}

これで、内側のループが 1 ミリ秒未満で実行されます。その結果、time() の値に変化はありません。これにより、シード(srand())が同じ値に再初期化され、乱数が繰り返されます..

誰でも回避策/修正を提案できますか?

4

4 に答える 4

5

立ち入り禁止srand:

srand(time(NULL)); //Initialize seed
for(int i=0; i<npasses; i++)
{
   for(int j=0; j<100; j++)
      printf("%d ", rand()%10);

   printf("\n"); //New line after 100 numbers
}
于 2013-05-16T10:41:30.670 に答える
4

ループの前にシードを 1 回設定します。

于 2013-05-16T10:38:23.143 に答える
-1

これを試して

srand(clock()); //Initialize seed
于 2013-05-16T10:41:03.937 に答える
-3

ランダム ジェネレーターを使用して、新しいシードを生成できます。

例えば:

srand((unsigned int)rand());

そしてsrand(time(NULL))、ループの前に一度だけ使用してください。srandしかし、別の回答で示唆されているように、ループ内に全体をドロップすることもできます。

于 2013-05-16T10:36:39.443 に答える