我在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));
非常感谢;)
答案 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)来为你的随机数生成器播种。