我正在考虑的方法是来自对…的回答。
#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);我也愿意在srand(time(NULL))中使用srand(time(NULL))方法。
这些方法有多贵?一个比另一个快得多吗?
发布于 2016-07-17 15:02:51
性能在很大程度上取决于您使用的生成器(这在很大程度上取决于所需数字的质量)。
例如,std::mt19937比std::random_device快得多,但它产生伪随机数。如果您不需要密码安全的随机数,这在大多数情况下都是可以的。但是,即使您这样做了,random_device也可以在我的机器上以大约50 MB/秒的速度产生原始熵--您真正需要多少随机性?(如果需要的话,mt19937生成的数量级比这个大约多)。
避免rand()。只是它的性能很差,而且周期很短。
另见兰德被认为有害。
https://stackoverflow.com/questions/38422514
复制相似问题