rand()和RAND_MAX根据数据类型给出不同的值

时间:2016-03-19 18:59:39

标签: c random

这里当我打印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

2 个答案:

答案 0 :(得分:1)

当您将整数除以整数时,会截断整数除法。 所以使用

y = (double)rand() / RAND_MAX;

绝对是获得所需结果的正确方法。

答案 1 :(得分:0)

不同类型的划分产生了不同的反应。

// Integer division
x=rand()/RAND_MAX;

// floating-point division
y=(double)rand()/RAND_MAX;

不需要需要,但它是确保浮点除法的方法之一。我喜欢最后一个,因为它确保除法将至少以x的精度完成,无论是floatdouble还是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;