随机数生成器每次都重复?

Random number generator repeats every time?

我正在尝试找到一个随机数生成器,每次我 运行 它都会给我一个随机数。我花了一个星期的时间尝试了数十种不同的网站,包括来自本网站和其他网站的。每次我 运行 它,它给我相同的数字!唯一一次改变是如果我改变范围,然后它一遍又一遍地给我新的数字。 我是 运行ning Code::Blocks 版本。 16.01 Windows 7. 谁能帮忙??我已经无计可施了!

此代码为我提供了相当随机的数字字符串,但每次都是相同的字符串!

#include <iostream>
#include <random>

int main()
{
  std::random_device rd;
  std::mt19937 eng(rd()); std::uniform_int_distribution<> distr(0, 10);

  for(int n=0; n<100; ++n)
    std::cout << distr(eng) << '\t';
}

我也在 phone 上的编译器应用程序上尝试了代码。

如果系统上没有真正的随机源,该标准允许 std::random_device 根据伪随机数生成器来实现。

您可能需要找到不同的熵源,例如时间或用户触摸坐标。

每个伪随机数生成器都会 return 相同初始种子值的相同数字序列。 您想要做的是每次 运行 程序时使用不同的种子。否则,您将每次都使用相同的默认种子并获得相同的值。

挑选好种子并不像你想象的那么容易。例如,如果程序的两个副本 运行 在同一秒内,使用 time(nullptr) 的输出仍然会给出相同的结果。使用 getpid() 的值也是不好的,因为 pid 值会换行,因此有时您会为不同的 运行 获得相同的值。幸运的是,您还有其他选择。 std::seed_seq 允许您组合多个不良来源,并且 return 是您可以使用的良好(或者更确切地说,相当不错)的种子值。还有 std::random_device 哪个(在所有理智的实现上)returns 原始熵 - 非常适合为伪随机生成器播种(或者如果它足够快可以满足你的目的,你可以直接使用它)或者你如果您担心它可能会在您的实现中作为 prng 实现,可以将它与 std::seed_seq 和不良资源结合起来为生成器播种。

我建议您阅读此页面:http://en.cppreference.com/w/cpp/numeric/random 以了解如何在现代 C++ 中处理随机数生成。