作业帮 > 综合 > 作业

C使用随机函数时,产生0~1的数,d=(double) rand()/(double)RAND_MAX.能不能使其等于1

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/13 15:53:50
C使用随机函数时,产生0~1的数,d=(double) rand()/(double)RAND_MAX.能不能使其等于1?
//下面这个代码可以测试这个值d = (double)f/(double)RAND_MAX;的范围是[0,1]
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int f= rand();
    double d = (double)f/(double)RAND_MAX;//你的表达式值 
    
    while(d != 1)//测试值是否为1,如果可以输出Test End表示值可以为1 
    {
            f= rand();
            printf("%d\n",f);
            d = (double)f/(double)RAND_MAX;
    }
    
    printf("Test End!\n");
}
 测试结果:

从结果看,值RAND_MAX为32767,而rand()函数生成的最大值正好是这个值,所以d可以为1,取值范围为[0,1]
再问: 在有的机器上.由于d是浮点数.是不是有可能大于1
再答: 应该是不会的,f的值是32767,RAND_MAX为32767,所以d的值是其实肯定的,但是通常的float与1比较时确实会用一个精度范围做为限制,这样比较会更有意义