使用取模运算符获取特定范围内的随机变量
Using a modulus operator to get a random variable in a certain range
抱歉,我知道已经发布了类似的问题,但这本书仍然让我感到困惑。
在"C Programming: Absolute Beginner's Guide"中有一行:
dice1 = (rand() % 5) + 1;
为骰子游戏生成 1 到 6 之间的随机数。
这不是错误吗?根据我的理解,您不能使用 % 5
得到 5 的余数,因此该行只会生成从 1 到 5 的数字。我是一个绝对的初学者,所以我不知道我是犯了错误还是书岛有人可以确认吗?
是的,5 % 5 == 0
,所以你只能从完整的表达式中得到数字 1 到 5。该方法的另一个问题是rand()
可能returns从0到2n-1的数字,所以不同值的总数只能平分到其他一些二的权力。
因此,即使假设 rand()
本身在其输出范围内给出均匀分布的值,模数也不会给出结果数字的均匀分布。
抱歉,我知道已经发布了类似的问题,但这本书仍然让我感到困惑。
在"C Programming: Absolute Beginner's Guide"中有一行:
dice1 = (rand() % 5) + 1;
为骰子游戏生成 1 到 6 之间的随机数。
这不是错误吗?根据我的理解,您不能使用 % 5
得到 5 的余数,因此该行只会生成从 1 到 5 的数字。我是一个绝对的初学者,所以我不知道我是犯了错误还是书岛有人可以确认吗?
是的,5 % 5 == 0
,所以你只能从完整的表达式中得到数字 1 到 5。该方法的另一个问题是rand()
可能returns从0到2n-1的数字,所以不同值的总数只能平分到其他一些二的权力。
因此,即使假设 rand()
本身在其输出范围内给出均匀分布的值,模数也不会给出结果数字的均匀分布。