我正在开发手机游戏,所以我需要创造一种可能性,以绝对相同的方式玩同样的游戏。这听起来很容易,因为我知道随机生成器的种子,为此它应该是相同的。
后来,当我在许多教程中同时使用std::mt19937
和std::uniform_int_distribution
时出现了问题。正如在另一个问题here中注意到的那样,平台之间的随机数分布不一致,而引擎却是一致的(如果它是基于数学算法的,怎么会有区别呢?)。
我在这个问题上没有特别注意,只是使用std::mt19937
而没有分发。
如果对号码分配没有特殊要求,这是一种正确的用法吗?
答案 0 :(得分:6)
std::mt19937
产生范围为[0,2 32 -1]的统一随机数。它实现了Mersenne Twister算法,并保证在所有实现中都提供可重复的结果。
如果需要其他范围,则需要以某种方式将[0,2 32 -1]减小到所需范围。 std::uniform_int_distribution
是实现此目的的便捷工具(但不能保证实现之间的可移植性)。
答案 1 :(得分:4)
随机数生成器 std::mt19937
将在任何平台上生成相同的值,但是标准允许std::uniform_int_distribution
具有灵活性。
所以您需要自己进行转换。