3

我正在开发一款手机游戏,我需要创造一种以完全相同的方式玩相同关卡的可能性。这听起来很容易,因为我知道随机生成器的种子,为此目的应该是相同的。

后来问题出现了,当我和很多教程std::mt19937一起使用std::uniform_int_distribution的时候。正如在另一个问题中注意到的那样随机数分布在平台之间并不一致,而引擎是一致的(如果它基于数学算法,它怎么可能不同?)。

我没有太在意这个问题,只是在std::mt19937没有发行版的情况下使用。

如果对号码分配没有特殊要求,这是一种正确的使用方式吗?

4

2 回答 2

6

std::mt19937产生 [0, 2 32 -1]范围内的均匀随机数。它实现了Mersenne Twister算法,并保证提供跨实现的可重现结果。

如果您需要不同的范围,则需要以某种方式将 [0, 2 32 -1] 减少到您想要的范围。std::uniform_int_distribution是一个方便的工具(但不保证跨实现的可移植性)。

于 2019-08-14T12:24:05.837 回答
4

随机数生成器 std::mt19937将为任何平台生成相同的值,但可惜标准允许std::uniform_int_distribution灵活。

因此,您需要自己进行转换。

于 2019-08-14T12:20:20.763 回答