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

时间:2018-06-16 21:40:05

标签: c++ random seed

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

起初我想争辩说同一种子并不能保证每个平台上的随机结果一致;这种网络方法非常幼稚。但对种子知之甚少,我无法确定。

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

1 个答案:

答案 0 :(得分:7)

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

但是对于<random>标题,情况会有所不同。

cppreference上显示

  

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

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

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

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

奖励video link,其中包含有关<random>标题的更多详细信息。