即使srand(time(NULL))不在循环中,数字在一段时间内也是相同的

时间:2012-09-26 05:36:24

标签: c random numbers srand

我在C中有一个简单的代码,中间有一个随机数生成代码。问题是,在很长一段时间内,这个数字保持不变,然后再增加一个! rand_pick可能是5次超过30次你运行C程序然后最终会改为6,... 我想知道为什么以及是否有另一种方法可以产生一个真正随机的1到9位数字。

int rand_pick;
srand (time(NULL));
rand_pick = 1 + (int) (9.0*rand()/(RAND_MAX+1.0));

非常感谢;)

2 个答案:

答案 0 :(得分:2)

不,数字应该是准随机的。您可以运行以下代码段:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define RANDOM_COUNT 10000

int main(void) {
    int rand_count[10] = {};
    int rand_pick;
    int i;

    srand (time(NULL));

    // run number of experiments
    for(i = 0; i < RANDOM_COUNT; i++) {
        rand_pick = 1 + (int) (9.0*rand()/(RAND_MAX+1.0));
        rand_count[rand_pick]++;
    }

    for(i = 1; i <= 9; i++) {
        printf("%d => %.3f %%\n", i, rand_count[rand_pick] /((float) RANDOM_COUNT));
    }   
}  

它将随机挑选10,000个数字并计算其分布。我总是得到统一的分配:

1 => 0.111 %
2 => 0.111 %
3 => 0.111 %
4 => 0.111 %
5 => 0.111 %
6 => 0.111 %
7 => 0.111 %
8 => 0.111 %
9 => 0.111 %

答案 1 :(得分:1)

您只想在程序中初始化一次srand。如果由于某种原因每秒运行程序几次,那么你需要从其他地方获取一个随机数(比如linux上的/ dev / random)来为你的随机数生成器播种。