c - 如何使while循环中的随机数相互独立?

标签 c loops random time

我在 while 循环中有一个随机生成的数字。因为我在运行它时使用 time(NULL) 播种它,所以我得到了一个相似结果流,同时我希望它更“异构”.

函数如下:

while(1) {
    srand((unsigned int) time(NULL));   // Seed
    double chance = random() / (double) RAND_MAX;
    if (chance <= 0.95)
        printf("All ok.\n");
    else
        printf("ERROR\n");
}

例如,结果如下:

...
All ok.
All ok.
All ok.
All ok.
All ok.
ERROR
ERROR
ERROR
ERROR
ERROR
All ok.
All ok.
All ok.
All ok.
All ok.
...

如何使结果更加彼此独立

最佳答案

不要在循环中随机播种。通常,您只想播种一次:

srand((unsigned int) time(NULL));   // Seed
while(1) {
    double chance = random() / (double) RAND_MAX;
    //...
}

计算机的速度足以在 time() 函数的分辨率内多次运行此循环,因此您最终会多次重新播种到相同的数字。

参见 https://stackoverflow.com/a/822368/2721883https://stackoverflow.com/a/39475626/2721883有关在 C 中生成随机数的更多信息。

关于c - 如何使while循环中的随机数相互独立?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48323557/

相关文章:

python - gdb 无法在 Mac Sierra 中正确安装

c - 使用 printf() 在 C 中打印 shell 命令行

r - 在 list.dirs 中包含模式

C - 打印怪异

java - 如何在 GUI 中生成随机数?

c - setjmp/longjmp 和局部变量

C 不同大小结构的并集

javascript - JavaScript 匿名函数的参数

loops - 在我的 Clojure 循环中什么也没有发生

python - 预测选择/有界兰特