在C中生成随机数的计算成本如何?
作者:互联网
我正在考虑的方法来自: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产生大约数量级的数量级).
避免兰德().它的性能很差,而且周期很短.
另见https://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful
标签:c,random,time-complexity 来源: https://codeday.me/bug/20190828/1757152.html