【问题标题】:why does rand() give relatively close numbers? [duplicate]为什么 rand() 给出相对接近的数字? [复制]
【发布时间】:2019-07-15 05:21:27
【问题描述】:

我在 c++ 中使用 rand() 函数,但每次我的代码都得到非常接近的数字`

int pickrandom(){
  time_t t;
  time(&t);
  srand (t);
  return rand();
}

我得到的数字如下:13809 13812 13812 13817

【问题讨论】:

  • 因为它只是在第一次调用 IIRC 时归还种子,而该种子是你的时间。在srand() 呼叫之后再次呼叫rand()
  • 只播种一次
  • 另外,pseudo-random generation functionality in the standard C++ librarysrandrand 多很多。我建议你改用它。
  • @Blaze -- 即使这是真的,再次调用rand() 也不能解决这个问题。问题来自于在每次调用rand() 之前调用srand
  • @PeteBecker 那是两个单独的错误。至少在我的机器上,至少在我的机器上快速连续运行时,仅调用一次 rand() 仍会产生那些“相似”的结果。

标签: c++ function random


【解决方案1】:

你是seeding 每次pickrandom 调用的随机生成器,这违背了播种的目的。此外,rand 是一个低质量的生成器,已被 C++11 <random> 库取代——您应该使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    相关资源
    最近更新 更多