我正在阅读有关从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