如果我在每个平台上使用相同的种子,随机结果会相同吗?

If I use the same seed on every platform, will the random results be the same?

在一场关于网络游戏的辩论中,一位用户建议对客户端和服务器对象使用相同的随机种子,这样即使敌人在服务器上随机移动,客户端也会以相同的方式移动。

起初我想争辩说,相同的种子并不能保证在每个平台上都有一致的随机结果;而且这种网络方法将非常天真。但对种子的了解不够,我无法确定。

为了论证,假设我们用 C++ 编码并使用标准的 rand() 和 srand() 函数。

rand 没有这样的保证。

对于 <random> header 但是情况有所不同。

cppreference 上说

All of the engines may be specifically seeded, serialized, and deserialized for use with repeatable simulators.

您可以使用 operator>>operator<< 序列化和反序列化引擎的状态,并通过网络发送此状态,并保证在不同平台上的可重现性。这是标准规定的。

  • std::default_random_engine 可以使用引擎盖下的任何引擎,因此没有这样的保证。

  • 分布是实现定义的,您需要定义自己的分布以保证可再现性。

奖金 video link 关于 <random> header.

的更多详细信息