【问题标题】:Random numbers seeded by time don't change [duplicate]按时间播种的随机数不会改变[重复]
【发布时间】:2018-11-18 13:22:57
【问题描述】:

为了生成 0 到 1 之间的随机数,我编写了以下代码:

 double random_0_to_1(){
    srand (time(NULL));
    random();
    return (double)random() / (double)RAND_MAX;
}

int main(){

    for(int i = 0 ; i < 10 ; i++){
        double temp = random_0_to_1();
        printf("%f\n", temp);
    }
    return 0;
}

无论我调用多少次,生成的结果总是相同的。总是生成相同的数字。我尝试了很多不同的方法,但似乎找不到任何有效的方法。有没有办法在我每次调用random_0_to_1 时生成不同的随机数?

【问题讨论】:

  • 您的代码中有一个无用的 random 调用。

标签: c random time random-seed


【解决方案1】:

您的代码中有三个错误:

  1. 您不止一次致电srand。您应该只在main 的开头调用一次srand
  2. 您使用srand 初始化RNG,但随后您调用random,它使用不同的、不相关的RNG。你应该打电话给rand
  3. 您没有包含必要的标头&lt;stdlib.h&gt;&lt;time.h&gt;&lt;stdio.h&gt;,因此您的代码具有未定义的行为。

【讨论】:

  • 我明白了,与此同时,我尝试将 'srand' 包含在我的 'main' 中,但没有成功。我曾在某处读到,调用“随机”会产生更好的结果,但似乎并非如此,因为我现在每次调用 main 时都会得到不同的数字。谢谢!
  • @VincentVD 如果你想使用random,你需要用srandom做种。
猜你喜欢
  • 1970-01-01
  • 2012-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-19
  • 2019-04-17
  • 1970-01-01
  • 2017-12-28
相关资源
最近更新 更多