gpt4 book ai didi

c - 即使 srand (time(NULL)) 在循环之外,数字在一段时间内是相同的

转载 作者:太空宇宙 更新时间:2023-11-04 07:32:20 26 4
gpt4 key购买 nike

我有一个简单的 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 %

关于c - 即使 srand (time(NULL)) 在循环之外,数字在一段时间内是相同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12595132/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com