我有一个包含两个随机数源的类。
std::random_device rd;
std::mt19937 random_engine;
我使用调用std::random_device
来种下std::mt19937
。如果我想产生一个数,我不在乎它是否可重复,那应该调用rd()
还是random_engine()
呢?在我的特定情况下,我相信两个都可以正常工作,因为这将在一些网络编码中被调用,其中性能并不占主导地位,而结果也不是特别敏感。然而,我对何时使用硬件熵和何时使用伪随机数感兴趣的一些“经验法则”。
目前,我只使用
std::random_device
来种植我的std::mt19937
引擎,以及我需要的任何随机数生成器,我使用std::mt19937
引擎。编辑:这里是关于我在这个例子中使用的确切说明:
这是一个游戏程序。这个特定的游戏允许用户在与对手开始回合之前自定义他们的“团队”。设置一个战斗的一部分涉及将一个团队发送到服务器。我的程序有几个团队,并使用随机数确定要加载哪个团队。每次新的战斗都会调用
std::random_device
来种子伪随机数生成器。我记录战斗的初始状态,其中包括我随机选择的这个团队和初始种子。我在这个问题中询问的特定随机数是用于随机团队选择(在这种情况下,不让对手提前知道我将使用哪个团队是有利的,但不是关键任务),但我真正寻求的是一个经验法则。如果我不需要数字的可重复性,总是使用
std::random_device
可以吗?或者使用熵的风险比它能够收集的更快吗?
auto const seed = std::random_device()();
,而不是std::random_engine()()
? - Ela782