当我想使用std :: random生成随机数时,我更喜欢哪种引擎? std::default_random_engine
或std::mt19937
?有什么区别?
答案 0 :(得分:14)
对于轻量级随机(例如游戏),您当然可以考虑default_random_engine
。但是如果你的代码在很大程度上取决于随机性的质量(例如模拟软件),你就不应该使用它,因为它只提供简约的保证:
这是图书馆实施者对发电机的选择 为相对随意提供至少可接受的引擎行为, 不熟练和/或轻量级使用。
mt19937
32位mersene twister(或其64位对应mt19937_64
)在另一侧well known algorithm传递得很好statistical randomness tests。因此,它是科学应用的理想选择。
但是,如果您的随机数用于security(例如加密)目的,则您不应考虑它们。
答案 1 :(得分:3)
这个问题目前正以一个主要意见为基础进行一次密切投票。我反对这一点,并说std::default_random_engine
客观上是一个糟糕的选择,因为你不知道你得到了什么,切换标准库可以给你不同的结果,你得到的随机性质。
你应该选择任何随机数生成器为你提供你想要的那种品质。如果您必须在两者之间进行选择,请使用std::mt19937
,因为它为您提供了可预测和定义的行为。
答案 2 :(得分:1)
他们满足不同的需求。第一个是某个生成器的实现定义别名,而后者专门使用Mersenne-Twister算法和32位种子。
如果您没有特殊要求,std::default_random_engine
应该没问题。