当我想使用std :: random生成随机数时,我更喜欢哪种引擎?的std::default_random_engine还是std::mt19937?有什么区别?
Chr*_*phe 16
对于轻量级随机(例如游戏),您当然可以考虑default_random_engine.但是如果你的代码在很大程度上取决于随机性的质量(例如模拟软件),你就不应该使用它,因为它只提供简约的保证:
它是库实现选择的一个生成器,它为相对随意,不熟练和/或轻量级的使用提供至少可接受的引擎行为.
的mt1993732位mersene捻线(或它的64位对应mt19937_64)是在另一侧上的公知的算法即经过很好统计随机性测试.因此它是科学应用的理想选择.
但是,如果您的随机数用于安全性(例如加密),则您不应考虑它们.
该问题目前以一票接近的票数作为主要意见。我会反对这一点,并说这std::default_random_engine在客观上是一个糟糕的选择,因为您不知道自己会得到什么,并且切换标准库可能会给您带来不同的随机性质量结果。
您应该选择任何随机数生成器为您提供您正在寻找的品质。如果您必须在两者之间进行选择,请选择std::mt19937它,因为它可以为您提供可预测和定义的行为。