避免使用srand()重复生成种子

时间:2013-05-16 10:35:07

标签: c algorithm random srand

我有一个典型的情况,我需要生成一批随机数。我使用了一个循环,每次传递产生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
}

现在,内循环在不到一毫秒的时间内执行。结果,time()的值没有变化。这会将种子(srand())重新初始化为相同的值,并且我的随机数是重复的。

任何人都可以建议解决方法/修复。

4 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:4)

在循环之前设置一次种子。

答案 2 :(得分:-1)

试试这个

srand(clock()); //Initialize seed

答案 3 :(得分:-3)

您可以使用随机生成器生成新种子。

例如:

srand((unsigned int)rand());

在循环之前只使用srand(time(NULL))一次。但正如另一个答案中所建议的那样,你也可以将整个srand放在循环中。