如果我们要在C语言里生成1-10的随机数该如何操作?
直接调用rand()?
当然不行,rand()返回的是从0到RAND_MAX的值,而RAND_MAX一般等于2^15-1 = 32767。
《The C Programming》里写道:
要生成[10,20]的随机数可以用以下方法
int random = 10 + (int) (10.0 * rand() / (RAND_MAX + 1.0));
好的,10我知道是基数,10.0不用说是 [0,1)范围的系数,但是为什么RAND_MAX 后跟着一个+1.0呢?
其实是老师写错了。。。上面的方法得到的随机数范围是[10,19]
应该是
int random = 10 + (int) (11.0 * rand() / (RAND_MAX + 1));
因为rand()/(RAND_MAX + 1.0)能生成[0,1)
(int)11 * rand()/(RAND_MAX + 1.0) 生成[0,11),即[0,10]
http://www.dfstermole.net/OAC/hrandom.html
原文:http://www.cnblogs.com/zeqli/p/3584080.html