【发布时间】:2021-01-06 21:12:54
【问题描述】:
所以这适用于 1 到 100 之间的 10 个随机整数:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(NULL));
for (int i = 0; i < 10; i++) {
int random = rand() % 100 + 1;
printf("The random integer is: %d\n", random);
}
}
但是,如果我想在该范围内随机生成双精度数,我该怎么做?我尝试将random 的声明更改为double,并像这样在RHS 上使用强制转换:
double random = (double) rand() % 100 + 1;
我希望这个问题能得到很好的表述。
【问题讨论】:
-
我标记为重复的答案会生成一个 0 到 1 的随机数,但是你可以乘以 99 并加 1 得到 1 到 100 之间的随机数。
-
试试
drand48或类似的。 -
目前,此问题和链接问题的所有答案except one 都存在量化问题 - 如果
RAND_MAX为 32767,则生成的随机数将是低质量的。如果您确实需要double类型提供的 52 位精度,则必须多次调用rand(),如该答案中所述。 -
您想考虑使用 Chux 的 this function,它看起来非常合理和高质量。如果您有一个非常糟糕的随机数生成器,您可以将
RANDOM_BITS定义更改为更小。
标签: c