【发布时间】:2019-02-02 16:31:14
【问题描述】:
当 RAND_MAX 的值似乎是 0.000000 时,为什么以下 c 代码只为 double a,b 生成介于 0 和 1 之间的实数(例如:0.840188,0.394383...等)。 RAND_MAX 不应该为rand() 函数生成的数字设置最大值吗?
#include <stdio.h>
#include <stdlib.h>
int main()
{
double a,b,c;
for (int i=0;i<100;i++){
a=(double)rand()/(double)RAND_MAX;
b=(double)rand()/(double)RAND_MAX;
c=a-b;
printf("itteration : %d values a=%f,b=%f,c=%f, RAND_MAX=%f \n",i,a,b,c,RAND_MAX);
}
return 0;
}
【问题讨论】:
-
如果 x 介于 0 和 max 之间,x / max 的结果将始终介于 0 和 1 之间,即简单的数学运算。加上
RAND_MAX不是双精度整数,所以使用 %d 使用 printf 打印它。 rand 不适合生成双数,它是为 int 数设计的,它不是很“随机”。您应该搜索在 C 中处理随机数的库。