【问题标题】:c++ random numbers srand [duplicate]c ++随机数srand [重复]
【发布时间】:2012-10-13 23:47:26
【问题描述】:

可能重复:
rand function returns same values when called within a single function c++

我有一个程序,每次鼠标点击都会创建一组新的随机数。如果我在没有 srand 的情况下运行程序( time(NULL) );每次的数字都是一样的。如果我用 srand ( time(NULL) ) 运行程序;那么我可能会点击垃圾邮件并且数字会重复。我该如何解决这个问题?

【问题讨论】:

  • 使用一次srand
  • 在您的程序中调用srand() 一次(且仅一次)。可能在启动时。
  • “垃圾点击”是什么意思?
  • 我的意思是我可以在屏幕上快速点击,而且数字很可能会重复——我不希望这种情况发生。
  • 当然,有很多伪随机数生成器,如果你点击很多很多次,数字会重复。但这不是你的问题。

标签: c++ random


【解决方案1】:

您的问题是用相同的值播种随机数生成器。 srand 函数用于为它初始化所谓的“种子”。种子可用于在序列中生成相同的随机数。

首先您需要初始化生成器,然后只需调用不带参数的rand 函数,它就会生成随机数。例如:

  /* initialize random seed with actual date-time */
  std::srand(std::time(NULL));

  /* generate ten random number lower than 10 */
  int random, times = 10;
  while(times){
    random = std::rand() % 10;
    times--;
  }

关于“垃圾点击”:std::time(NULL) 具有以秒为单位的精度,因此如果您在同一秒内点击,您将使用相同的值初始化随机种子。

这是一个示例on the official c++ reference 网站, 还有另一个关于cplusplus.com 的例子。

【讨论】:

  • cplusplus.com 不仅不是官方的,而且包含许多错误,因此在这里不受欢迎。试试cppreference.com,他们尽量遵守实际标准。
  • 相应修改,谢谢。
【解决方案2】:

rand函数不太擅长生成随机数,看看boost::random。它很棒,可以创建随机和半随机数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 2011-06-11
    相关资源
    最近更新 更多