2013-05-16 56 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 
}