C 利用模算子得到一定范围内的随机变量

C 利用模算子得到一定范围内的随机变量,c,modulus,C,Modulus,对不起,我知道已经发布了类似的问题,但这本书还是让我困惑 在“C编程:绝对初学者指南”中,有一行: dice1 = (rand() % 5) + 1; 为骰子游戏生成1到6之间的随机数 这不是一个错误吗?根据我的理解,使用%5无法得到5的余数,因此该行只能生成从1到5的数字。我是一个绝对的初学者,所以我不知道我是在犯错误还是这本书是错的。有人能确认吗?是的,5%5==0,因此您只能从完整表达式中获取数字1到5。该方法的另一个问题是,rand()可能返回从0到2n-1的数字,因此不同值的总数只能

对不起,我知道已经发布了类似的问题,但这本书还是让我困惑

在“C编程:绝对初学者指南”中,有一行:

dice1 = (rand() % 5) + 1;
为骰子游戏生成1到6之间的随机数


这不是一个错误吗?根据我的理解,使用
%5
无法得到5的余数,因此该行只能生成从1到5的数字。我是一个绝对的初学者,所以我不知道我是在犯错误还是这本书是错的。有人能确认吗?

是的,
5%5==0
,因此您只能从完整表达式中获取数字1到5。该方法的另一个问题是,
rand()
可能返回从0到2n-1的数字,因此不同值的总数只能等分为2的其他幂。
因此,即使假设
rand()
本身在其输出范围内给出了均匀分布的值,模也不会给出结果数的均匀分布。

这一点您是正确的。这本书,如果它声称数字是从1到6,是错误的。是的,这是一个错误。啊,谢谢。这让我发疯。当“琐碎的打字错误”是一本书的作者的财产,而不是问题的关键时,以“琐碎的打字错误”结尾是否公平?扔掉那本书。这完全是废话。