这里当我打印x的值时,它给出零作为输出。当我打印y时,我得到正确的值(0到1之间的随机数),类型转换是它看起来的问题。为什么我需要对它进行强制转换吗?
double x,y;
x=rand()/RAND_MAX;
printf("X=%f\n",x);
y=(double)rand()/RAND_MAX;
printf("Y=%f",y);
输出
X=0.000000
Y=0.546745
答案 0 :(得分:1)
当您将整数除以整数时,会截断整数除法。 所以使用
y = (double)rand() / RAND_MAX;
绝对是获得所需结果的正确方法。
答案 1 :(得分:0)
不同类型的划分产生了不同的反应。
// Integer division
x=rand()/RAND_MAX;
// floating-point division
y=(double)rand()/RAND_MAX;
不需要需要,但它是确保浮点除法的方法之一。我喜欢最后一个,因为它确保除法将至少以x
的精度完成,无论是float
,double
还是long double
而不更改代码。
x = (double)rand()/RAND_MAX;
x = 1.0*rand()/RAND_MAX;
x = rand()/(1.0*RAND_MAX);
x = rand();
x /= RAND_MAX;
顺便说一句,通常代码需要生成一个数字[0.0 ... 1.0)
:从0.0到接近1.0。
x = rand();
x /= RAND_MAX + 1.0;