2016-04-07 73 views
0

我目前使用此代碼隨機化一些變量。嘗試使用整個rand()表是否是個好主意?

srand(time(NULL)); 
do{vkmhrand = rand();vkmh = vkmhrand/78;}while(vkmh <= 0 || vkmh > vmax); 

VMAX不會超過415,這意味着,如果我做它作爲vkmh = RAND()大多數隨機表的簡單將被丟棄,再加上我也得到了一些不錯的小數,使結果更有趣一點。

我知道rand()不是存在的最好的隨機函數。我只是在想,儘量嘗試儘可能多地使用桌子是不是一個好主意?這是浪費時間嗎?還是它會加劇表中可能已經存在的任何模式?

+0

你是什麼意思*隨機表* *? –

+0

rand()函數在您調用它時使用的值表。 –

+0

桌子本身已經非常隨意,我無法想象抓住整個桌子而不是特定的部分會更加隨機。顯然有一個是,但沒有理由爲什麼整個表是可能的,也許你的小部分可能更隨機(偶然)。沒有辦法真正知道沒有測試,即使如此,不夠重要,值得你花時間。 –

回答

0

用這個,我不是單證員爲它的隨機性雖然

srand(time(NULL)); 
do { 
    vkmhrand = rand() % 415; 
    vkmh = vkmhrand/78; 
} 
while(vkmh <= 0 || vkmh > vmax); 
1

縮放的rand()輸出實際上意味着你的情況,你可以使用更多的位。假設它們的值彼此獨立(對於rand()的所有實現可能都不是這樣),這通常是好事。但是,您必須注意,這些附加位不是用來使「高位」更「隨機」(不太可預測的),而只是給您更多的小數位,因此您的解決方案空間具有更好的分辨率。

通常的方式來產生在一定範圍內浮動是:

double vkmh = (double) rand()/RAND_MAX * (vmax-vmin) + vmin; 

如果你是罰款整數,通常的方法是:

unsigned int = rand() % (vmax - vmin + 1) + vmin; 

雖然這將導致如果RAND_MAX不是(vmax - vmin + 1)分佈值的倍數

相關問題