2013-05-16 85 views
0

我有一个典型的情况,我需要生成一批随机数。我已经使用了一个环,其在每次通过生成100枚随机数:使用srand避免重复种子生成()

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())相同的值和我的随机数字REPEATED ..

任何人都可以提出一个解决方法/修复。

回答

4

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

-3

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

例如:

srand((unsigned int)rand()); 

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

+0

能否请您给一些示例代码? –

+0

这不仅是不必要的,而且很危险。大多数发生器现在都有超过32位的周期,并且使用32位种子重复播种会限制您仅使用前几个有限数量的序列。在程序开始时调用srand()一次,并且只调用一次。 –

-1

试试这个

srand(clock()); //Initialize seed 
+0

我认为这会导致同样的问题? –

+0

@AshisKumarSahoo我认为它应该不一样。 – BLUEPIXY

+0

为什么不能?系统时间无法在毫秒以下进行校准。 time()已经这样做了。我不认为时钟()工作,否则。请澄清。 –

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 
}