作者:Shellycs68 | 来源:互联网 | 2022-12-06 14:41
为什么以下c代码产生的实数仅在0到1之间(例如:0.840188,0.394383 ...等),double a,b
当RAND_MAX的值出现时0.000000
.不应该RAND_MAX
设置rand()
函数生成的数字的最大值?
#include
#include
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;
}
Matteo Itali..
5
RAND_MAX
是一个整数常量,但是您使用说明%f
符(用于double
)来打印它,这是未定义的行为(在您的情况下恰好打印0).使用%d
,你会看到的实际价值RAND_MAX
.
顺便说一下,printf
如果你发出足够高的警告,几乎任何体面的编译器都会警告你这个无效.确保这样做,C和C++充满了陷阱,至少让编译器尽可能地帮助你.
1> Matteo Itali..:
RAND_MAX
是一个整数常量,但是您使用说明%f
符(用于double
)来打印它,这是未定义的行为(在您的情况下恰好打印0).使用%d
,你会看到的实际价值RAND_MAX
.
顺便说一下,printf
如果你发出足够高的警告,几乎任何体面的编译器都会警告你这个无效.确保这样做,C和C++充满了陷阱,至少让编译器尽可能地帮助你.