在 C++ 中生成随机数的计算成本有多高?

Jos*_*osh 5 c++ random optimization performance mt19937

我正在考虑的方法来自于从范围生成随机整数的答案

#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);
Run Code Online (Sandbox Code Playgroud)

我也愿意使用该rand()方法srand(time(NULL))

这些方法的成本有多高?一个比另一个快很多吗?

Jes*_*uhl 5

性能很大程度上取决于您使用的生成器(而生成器又很大程度上取决于您所需的数字的质量)。

\n

例如,std::mt19937快得多std::random_device但它会生成伪随机数。\n如果您不需要加密安全的随机数,这对于大多数用途来说都很好。但即使你这样做,random_device可以在我的机器上以大约 50\xc2\xa0MB/秒的速度产生原始熵\xe2\x80\x94你真正需要多少随机性?(mt19937如果需要的话,生成的数量级大约比该数量级多)。

\n

避免rand()。它只是性能很差,周期也很低。

\n

另请参阅兰德被视为有害

\n