我有一个简单的 C 代码,中间有一个随机数生成代码.. 问题是这个数字在很长一段时间内保持不变,然后上升一个!运行 C 程序 30 次以上,rand_pick 可能为 5,然后最终变为 6,...我想知道为什么以及是否有另一种方法可以产生真正随机的 1 到 9 位数字。
int rand_pick;
srand (time(NULL));
rand_pick = 1 + (int) (9.0*rand()/(RAND_MAX+1.0));
非常感谢 ;)
不,数字应该是准随机的。您可以运行这段代码:
#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 %
您只想在程序中初始化 srand 一次。如果您出于某种原因每秒运行该程序数次,那么您需要从其他地方(如 Linux 上的 /dev/random)获取一个随机数来为您的随机数生成器播种。