按时间播种的随机数不变

时间:2018-11-18 13:22:58

标签: c random time random-seed

要生成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时都不同的随机数?

1 个答案:

答案 0 :(得分:1)

您的代码中存在三个错误:

  1. 您不止一次致电srand。在srand的开头,您应该只拨打一次main
  2. 您正在使用srand初始化RNG,但是随后您要调用random,它使用了另一个不相关的RNG。您应该打rand
  3. 您没有包括必要的标头<stdlib.h><time.h><stdio.h>,因此您的代码具有未定义的行为。