我有一个典型的情况,我需要生成一批随机数。我使用了一个循环,每次传递产生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())重新初始化为相同的值,并且我的随机数是重复的。
任何人都可以建议解决方法/修复。
答案 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
放在循环中。