我正在考虑的方法来自:https : //stackoverflow.com/a/19728404/6571958
#include <random>
std::random_device rd; // only used once to initialise (seed) engine
std::mt19937 rng(rd()); // random-number engine used (Mersenne-Twister in this case)
std::uniform_int_distribution<int> uni(min,max); // guaranteed unbiased
auto random_integer = uni(rng);
我也愿意将这种rand()
方法用于srand(time(NULL))
。
我的问题是:这些方法的价格是多少?一个比另一个快得多吗?
性能在很大程度上取决于您使用的生成器(而在很大程度上取决于所需数字的质量)。
例如,std::mt19937
是多少的速度比std::random_device
,但产生的伪随机数。如果您不需要密码安全的随机数,那么对于大多数用途来说,这是很好的选择。但是即使您这样做,random_device
也可以在我的计算机上以约50MB /秒的速度产生原始熵-您真正需要多少随机性?(mt19937
如果需要的话,产生的数量级要比数量级多)。
避免rand()
。它的性质很差,周期很短。
另请参阅https://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句