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

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

本文关键字:随机 种子 结果 平台 如果      更新时间:2023-10-16

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

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

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

对于rand来说,没有这样的保证。

然而,对于<random>标题,情况有所不同。

关于 cpp 首选项,它指出

所有引擎都可以专门设定种子、序列化和反序列化,以便与可重复的模拟器一起使用。

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

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

  • 发行版
  • 是实现定义的,您需要定义自己的发行版以保证可重复性。

奖励视频链接,其中包含有关<random>标题的更多详细信息。