srand((int)time(0));j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
srand((int)time(0));中time(0)的返回值不就是int类型么?为啥还要用((int)time(0))?j=1+(int)(10.0*rand()/(...
srand((int)time(0));中time(0)的返回值不就是int类型么?为啥还要用((int)time(0))? j=1+(int)(10.0*rand()/(RAND_MAX+1.0));前面为什么有个数字1?后面又为什么要10.0*rand(),再后面又为什么要RAND_MAX+1.0这个+1.0又是什么意思?
展开
1个回答
展开全部
你这里有几个问题
time()函数的返回类型不是int,是time_t,如果要深究time_t的类型的话应该是_int64或者long,所以需要使用(int)来所类型转换。
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));这是一个随机生成1到10之间的数。
2.1 前面的1,确定了最小值是1。
2.2 由于RAND_MAX代表的rand()的最大值,10.0*rand()的范围就是[0,10 * RAND_MAX]。
2.3 10.0*rand()/(RAND_MAX+1.0)的范围就是[0,10)了,RAND_MAX+1.0就是为了确保结果小于10.
2.4 (int)(10.0*rand()/(RAND_MAX+1.0))就是对计算出来的结果进行取整,所以结果范围为[0,9]之间的整数。
追问
rand()返回值为 实型吗?
还有就是 如果 (int)(10.0*rand()/(RAND_MAX)) 结果是不是[0,10]了呢?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询