我正在閱讀有關從rand5()生成rand7()的問題,我似乎還不太明白。建議的解決方案顯示:瞭解統一的隨機數生成
int i;
do
{
i = 5 * (rand5() - 1) + rand5(); // i is now uniformly random between 1 and 25
} while(i > 21);
// i is now uniformly random between 1 and 21
return i % 7 + 1; // result is now uniformly random between 1 and 7
我理解的方式,但我不明白爲什麼範圍必須是從1到21,我的解決辦法是這樣的:
int i;
do
{
i = (rand5()-1) + rand5(); // i is now uniformly random between 1 and 9
} while(i > 7);
// i is now uniformly random between 0 and 6
return i+1;
我無法說服自己,上述方法無效。你們能否給我一個比其他人看起來更多的數字例子,使我的方法不統一?爲什麼需要5的乘數?
「我現在在1到9之間是均勻隨機的」。我不認爲這是真的。有兩種方法可以生成2(1 - 1 + 2或2 - 1 + 1),但生成1(1 - 1 + 1)的方法只有一種。 – Kevin 2014-10-01 19:32:41
很好的答案。我現在確信。 – 2014-10-01 19:43:10