【发布时间】:2022-01-17 18:06:13
【问题描述】:
在 C 中生成随机数的结果不好的原因是什么?请参阅下面的代码。结果应该是 0 - 1 之间的数字。但是当我打印随机数时,结果是:Doba prichodu: 690522220 n 次。是的,我正在使用 srand(time(NULL));
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include <math.h>
.
.
.
pthread_t vlakna[n];
for (int i = 0; i < n; i++) {
// double dobaPrichodu = (rand() / (double)RAND_MAX) * 7 + 1; // 1 - 8
double dobaPrichodu = rand()/(double)RAND_MAX;
printf("Doba prichodu: %d\n", dobaPrichodu);
argsZakaznici[i] = (ARGUMENTS_ZAKAZNIK){&args, i+1, dobaPrichodu};
pthread_create(&vlakna[i], NULL, Zakaznik, &argsZakaznici[i]);
}
【问题讨论】:
-
如果您的编译器没有警告您错误的替换(
%d用于double),您应该考虑升级到最新版本并打开所有警告。大多数现代编译器应该能够发现此类错别字。
标签: c random pthreads unistd.h