1+(int)(10.0*rand()/(RAND_MAX+1.0));这个是什么意思,请解释下,谢谢 25
(int)10.0*rand()/(RAND_MAX+1.0);随机数是0~9,
rand()%10;随机数是0~9,
第一个是怎么算的额??不能理解啊 展开
1+(int)(10.0*rand()/(RAND_MAX+1.0));整个语句的作用是产生随机数1~10。
rand():用来产生一个随机数的函数,范围是[0, RAND_MAX],RAND_MAX是C中stdlib.h中宏定义的一个字符常量:
#define RAND_MAX Ox7FFF
其值最小为0,最大为Ox7FFF。
10.0*rand() 得到一个浮点数,是10倍的[0, RAND_MAX],结果是[0.0, 10.0*RAND_MAX]。
/(RAND_MAX + 1.0):改变取值范围为 [0.0 , 1.0)
(int)(10.0*rand() / (RAND_MAX + 1.0)) :在[0.0 , 10.0)中取整:0,1,2...9
扩展资料:
rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数。
如果要产生0~10的10个整数,可以表达为:
int N = rand() % 11;
这样,N的值就是一个0~10的随机数,如果要产生1~10,则是这样:
int N = 1 + rand() % 10;
总结来说,可以表示为:
a + rand() % n
其中的a是起始值,n是整数的范围。
a + rand() % (b-a+1) 就表示a~b之间的一个随机数。
(int)10.0*rand()/(RAND_MAX+1.0)的意思是将0到RAND_MAX之间的整数等分成十份,如果随机的生成数落在第一份,则映射成0,如落在第二份,则映射成1。。。。。。如落在第十分,则映射成9.
其实就是随机一个0~10之间不包括10的一个浮点数,然后强制转换成int就是0~9之间的整数了
这个跟第二个不同的地方就是,在多次随机出来的结果,前者理论上会更平均,而后者仅仅是和10求余得到的结果,没前面的结果来得平均
rand()除以随机数最大值+1,结果是(0 1)的小数,再乘10同时取整数就是0~9
2)rand()对10取余,就是0~9
但是闭区间0到100随机数对100求余,得到的虽然也是闭区间0到99,但是此时求余后得到0的概率增大,是得到其他数的二倍。
所以这种小数量级的总数不可以用第二种方法。
由于RAND_MAX值对于确定的库函数是一个定值,最小是32767,若对10求余,概率只超过了1/3277,所以不是特别严谨时,可以用