C++ 我可以在不指定数字分布的情况下使用随机生成器吗?

C++ 我可以在不指定数字分布的情况下使用随机生成器吗?,c++,c++11,random,cross-platform,C++,C++11,Random,Cross Platform,我正在开发一款手机游戏,我需要创造一种可能性,以完全相同的方式玩同一关卡。这听起来很容易,因为我知道一个随机生成器的种子,在这个目的上应该是相同的 后来,当我在许多教程中使用std::mt19937和std::uniform\u int\u distribution时,问题出现了。正如在另一个问题中所注意到的,随机数分布在平台之间不一致,而引擎是一致的(如果它基于数学算法,它怎么可能不同?) 我没有太注意这个问题,只是使用了std::mt19937而没有分发 如果对数字分布没有特殊要求,这是一种

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

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

我没有太注意这个问题,只是使用了
std::mt19937
而没有分发

如果对数字分布没有特殊要求,这是一种正确的使用方法吗?

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

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

生成[0232-1]范围内的统一随机数。它实现了alrogithm,并保证跨实现提供可复制的结果


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

您可以从零开始编写自己的发行版或整个伪随机生成器,这在您的平台上是一致的。对于像手机游戏这样毫无意义的东西,我怀疑伪随机数生成的数学品质是否非常重要。@SamVarshavchik谢谢,我同意你的观点,再多玩一款所需数字范围不大的手机游戏并不需要高数学品质。相关/可能重复:@rustyx;您必须非常丰富。@UmNyobe:对于生成器以及实现规范的标准。对于
std::uniform\u int\u distribution
请再次参阅标准;未指定转换函数。是标准的适当代理,并且是免费的。@Bathsheba提到的论文指定了状态转换。它没有指定在C++标准中使用的种子。