[讨论]有关生成随机数的问题
int RANGE_MIN = 0; int RANGE_MAX = 100;
for (i = 0; i < 10; i++ )
{
int rand100 = (((double) rand() /
(double) RAND_MAX) * RANGE_MAX + RANGE_MIN);
printf( " %6d\n", rand100);
}
}
上面是我在网上看到的一段有关生成随机数的函数。。。是生成0-100的随机数。。。
那句桔红色的部分不太明白。。我感觉上应该是
rand() % RAND_MAX + RANGE_MIN; 可是结果就不是正确的了
麻烦大家给我讲一下吧
----------------解决方案--------------------------------------------------------
(double) rand() 应该是随机得到小于RAND_MAX内的一个数据,那么(double) rand() / (double) RAND_MAX就是得到一个小于1的值!再乘以100就得到小于100的值,int rand100 =。。就是取整数
个人认为最后+ RANGE_MIN是错误的,比如rand() 刚好返回RAND_MAX,那么(double) rand() / (double) RAND_MAX就是1,((double) rand() / (double) RAND_MAX) * RANGE_MAX就是100,这里是因为刚好RANGE_MIN = 0了,
如果换成是生成50-100的随机数,那么按照上面的定义应该RANGE_MIN = 50,那么接上面的如果rand() 刚好返回RAND_MAX话rand100就等于150 了!
rand()函数好像是通过设置时钟来实现得到一个小于RAND_MAX的正数!之前还要设置时钟方式的,应该还要设置下RAND_MIN为0吧!不然返回不了0吧!没有深研究过。
----------------解决方案--------------------------------------------------------
rand(产生随机数) | |
相关函数 |
srand,random,srandom |
表头文件 |
#include<stdlib.h> |
定义函数 |
int rand(void) |
函数说明 |
rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。关于随机数种子请参考srand()。 |
返回值 |
返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,其值为2147483647。 |
范例 |
/* 产生介于1 到10 间的随机数值,此范例未设随机数种子,完整的随机数产生请参考 srand()*/ #include<stdlib.h> main() { int i,j; for(i=0;i<10;i++) { j=1+(int)(10.0*rand()/(RAND_MAX+1.0)); printf(“%d “,j); } } |
执行 |
9 4 8 8 10 2 4 8 3 6 9 4 8 8 10 2 4 8 3 6 |
| |
|
srand(设置随机数种子) |
相关函数 |
rand,random srandom |
表头文件 |
#include<stdlib.h> |
定义函数 |
void srand (unsigned int seed); |
函数说明 |
srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。 |
返回值 |
|
范例 |
/* 产生介于1 到10 间的随机数值,此范例与执行结果可与rand()参照*/ #include<time.h> #include<stdlib.h> main() { int i,j; srand((int)time(0)); for(i=0;i<10;i++) { j=1+(int)(10.0*rand()/(RAND_MAX+1.0)); printf(“ %d “,j); } } |
执行 |
5 8 8 8 10 2 10 8 9 9 2 9 7 4 10 3 2 10 8 7 |
----------------解决方案--------------------------------------------------------
这是生成随即数的函数及方法
----------------解决方案--------------------------------------------------------
你看那段代码不科学.怎么说也要
(((double) rand() / (double) (RAND_MAX+1),其实RAND_MAX就是RAND()产生的值.
----------------解决方案--------------------------------------------------------
不好意思.搞错了.RAND_MAX不是RAND()的返回值
----------------解决方案--------------------------------------------------------
不懂啊````
RANGE_MIN
RANGE_MAX
这2个是自己定义的吗?```
产生随机数一般有什么用啊``
----------------解决方案--------------------------------------------------------
用srand初始化随机数种子
再用rand得到随机数
----------------解决方案--------------------------------------------------------