Tag: 随机

C中的rand()函数即使在播种时也不是随机的

这很可能是机器相关的问题,但我无法弄清楚可能出现的问题。 #include #include #include int main(int argc, char** argv) { srand(time(NULL)); int r1 = rand(); int r2 = rand(); printf(“%d %d\n”, r1, r2); } 我使用编译上面的代码 gcc randd.c 然后手动运行几次,第一个数字看起来非常相似,而第二个看起来是随机的: 1025720610 1435057801 1025737417 1717533050 1025754224 2000008299 1025771031 134999901 1025787838 417475150 第一次调用rand()似乎与时间密切相关,并且随着时间的推移严格增加。 有关为何发生这种情况或如何解决的任何想法? 这发生在OSX 10.11上

如果我没有指定srand(),rand()使用什么种子?

这是代码: #include #include #include int main(void) { int r; int i; for (i = 0; i < 100; i++) { r = rand() % 100 + 1; printf("%d\n", r); } return 0; } 我一直在尝试随机数,但有一天,我忘了把srand()放进去,但是rand()函数仍然可以随机输入一个数字(相同的序列)。 问题是,如果我没有指明它,它会使用什么种子?

glibc rand函数实现

我正在阅读带有glibc源代码的c标准库rand()函数实现 。 stdlib / random_r.c,第359行 int __random_r (buf, result) struct random_data *buf; int32_t *result; { int32_t *state; if (buf == NULL || result == NULL) goto fail; state = buf->state; if (buf->rand_type == TYPE_0) { int32_t val = state[0]; val = ((state[0] * 1103515245) + 12345) & 0x7fffffff; state[0] = val; *result = val; } […]

如何生成大的随机数C.

我正在寻找一种在C …(100000000 – 999999999)中生成大约2 ^ 64的大随机数的方法,以用于公钥加密算法(如p和q)。 我不想生成小于2 ^ 64的数字(即小于100000000)。 有什么可以帮我做到这一点吗?

从文件中读取并存储在数组中

我编写了以下程序,从文件中逐行读取并将其存储在单词数组中。 输出应该是数组中的两个随机字。 但令人惊讶的是,单词数组只包含重复读取的最后一个单词。 对出了什么问题的任何帮助? int main(){ int i = 0; char line_buffer[BUFSIZ]; char* words[20]; FILE *fp = fopen(“input.txt”, “r”); while (fgets(line_buffer, sizeof(line_buffer), fp)) { //printf(“%s”, line_buffer); words[i] = line_buffer; i = i + 1; } printf(“%d”, i); int j = rand()%8; int k = (j+1)%8; printf(“%s %s”, words[j], words[k]); fclose(fp); return 0; } input.txt中 nematode […]

为什么rand()在fork之后不是那么随机?

#include #include #include #include int main() { int i =10; /* initialize random seed: */ srand(time(NULL)); while(i–){ if(fork()==0){ /* initialize random seed here does not make a difference: srand(time(NULL)); */ printf(“%d : %d\n”,i,rand()); return; } } return (EXIT_SUCCESS); } 打印相同(每次运行时不同)数量10次 – 预计? 我有一个更复杂的代码片段,每个分叉的进程依次运行 – 没有区别

在C中生成之间的随机数?

我已经看到很多关于这个特定主题的问题,但没有一个对我有任何答案,所以我想问这个问题。 我想在[-1,1]之间生成一个随机数。 我怎么能这样做?

如何在没有rand()函数的情况下生成随机数?

我想生成介于0和某个整数之间的(伪)随机数。 我不介意他们是不是太随意。 我可以访问当天的当前时间,但不能访问randfunction。 任何人都可以想到一种足够强大的方法来生成这些吗? 也许,从一天中的某个时间丢弃一些比特并取模数我的整数或其他东西? 我在用c。

stdlib的rand()总是给出相同的序列吗?

我非常希望能够重复生成相同的伪随机数据集,特别是在调整实验代码时。 通过观察我会说rand()似乎每次都给出相同的数字序列*。 是否可以保证在同一台机器/不同机器/不同架构上重复执行? *明显对于同一种子。

在rollDice函数内调用srand(time(NULL))时出现问题

当我在rollDice()函数中使用第一个srand(time(NULL))时它不起作用。 但是当我把它放在主要部分时,它可以工作。 这是为什么? 你能告诉我逻辑吗? #include #include #include int rollDice(void) { return (1+rand()%6) + (1+rand()%6); } int main(void) { int roll; srand(time(NULL)); roll = rollDice(); printf(“You rolled %d.\n”, roll); enum Gamestatus {WON,LOST,CONTINUE}; enum Gamestatus status; while(status==CONTINUE){ printf(“You are rolling again: \n”); printf(“You rolled %d\n”, roll = rollDice()); if (targetPoint==roll){ printf(“You win!”); status=WON; } else if(7==roll){ printf(“You […]