代码之家  ›  专栏  ›  技术社区  ›  Dan

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

  •  2
  • Dan  · 技术社区  · 7 年前

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

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

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

    1 回复  |  直到 7 年前
        1
  •  7
  •   super    7 年前

    用于 rand 没有这样的保证。

    对于 <random> 但情况不同。

    打开 cppreference 它说

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

    可以使用 operator>> operator<< 并通过网络发送这种状态,保证在不同平台上的可复制性。这是标准规定的。

    • std::default_random_engine 可使用发动机罩下的任何发动机,因此没有此类保证。

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

    奖金 video link 有更多关于 <随机> 标题。