2015-04-01 71 views
0

我正在使用C生成範圍[min max]中的整數隨機數。我正在使用生成範圍[min,max]中的隨機數

int random_int(int min, int max) 
{ 
    return min + rand() % (max - min); 
} 

但我認爲上面的代碼是範圍:[最小,最大),它不是[最小最大]。你能告訴我一個代碼來完成我的工作嗎?最好謝謝

+4

'...%(max + 1-min)' – SleuthEye 2015-04-01 02:27:08

+1

@SleuthEye那麼,這將引入偏見... – Sebivor 2015-04-01 02:50:23

+0

**澄清需要**:你是否在不可預知的隨機(在哪裏我們知道,同樣的價值可能會一遍又一遍地出現在無限期),或均勻分佈的隨機(更像是一副牌的混洗)? – Sebivor 2015-04-01 02:54:40

回答

0

正如你猜測的那樣,代碼確實會生成不包含max值的隨機數。如果您需要將max值包含在生成的隨機數範圍內,則範圍將變爲[最小,最大+ 1)。所以,你可以簡單地修改代碼以:

int random_int(int min, int max) 
{ 
    return min + rand() % (max+1 - min); 
} 

PS:即提供的原始「模」僞隨機數您發佈發生器的質量不是一個問題(見this post一些更詳細地尊重@undefinedbehaviour在評論中提到的內容)。