我有一个包含两个随机源的类。
std::random_device rd;
std::mt19937 random_engine;
我std::mt19937
打电话给std::random_device
. 如果我想生成一个数字并且我不关心可重复性,我应该打电话rd()
还是random_engine()
?
在我的特殊情况下,我确信两者都可以正常工作,因为这将在某些网络代码中调用,其中性能不是很重要,结果也不是特别敏感。但是,我对何时使用硬件熵和何时使用伪随机数的一些“经验法则”感兴趣。
目前,我只std::random_device
用来播种我的std::mt19937
引擎,而我的程序需要的任何随机数生成,我都使用std::mt19937
引擎。
编辑:这是我使用这个特定示例的确切含义的解释:
这是一个游戏程序。这个特定的游戏允许用户在与对手开始一轮之前自定义他们的“团队”。设置战斗的一部分涉及将团队发送到服务器。我的程序有几个团队,并使用随机数来确定要加载哪个团队。每场新的战斗都会调用std::random_device
播种伪随机数生成器。我记录了战斗的初始状态,其中包括我随机选择的这个团队和初始种子。
我在这个问题中询问的特定随机数是用于随机团队选择(不让对手提前知道我正在使用的团队是有益的,但不是关键任务),但我的我真正寻找的是经验法则。std::random_device
如果我不需要我的数字的可重复性,总是使用它是否可以,或者是否存在真正的风险,即用完熵的速度比收集它的速度快?