C ++ rand()没有提供基于种子的正确数字

时间:2017-02-11 00:35:01

标签: c++ random srand

我正在为我的类进行C ++赋值,我们必须使用种子为99的rand()来生成一组值。但是,我的问题是,当我尝试在我们的参数中创建一个值时,该数字与教师为我们提供的确定的第一个数字不同。 代码如下所示:

    int lottoNumber;
  srand (RANDOM_NUMBER_SEED);
  do
  {
    lottoNumber = rand ();
  } while (lottoNumber > 25 || lottoNumber < 1);

  cout << lottoNumber << endl;

由此产生的价值是13,而预期产生的数字是2.任何帮助,为什么这是不同的将是伟大的,谢谢!

3 个答案:

答案 0 :(得分:9)

rand()使用的算法是实现定义的。

这意味着它在不同的编译器和编译器版本上可能会有所不同。

答案 1 :(得分:5)

你的教练是产生幻觉的。这是一个伪随机数字生成器。仅仅因为这种生成器的属性倾向于在给定相同种子的情况下产生相同的结果,在任何特定的程序调用中,并不意味着这种行为以任何方式得到保证,或者应该预期相同的属性应用一般来说永远。

如果您想要确定性序列,请不要使用随机数生成器!!!

答案 2 :(得分:4)

rand()依赖于实现,来自cppreference.com std::rand

  

无法保证所产生的随机序列的质量。

你可能想要使用更像std :: mt19937

的东西