当前位置: 代码迷 >> C语言 >> [讨论]有关生成随机数的问题
  详细解决方案

[讨论]有关生成随机数的问题

热度:202   发布时间:2007-10-13 13:41:10.0
[讨论]有关生成随机数的问题
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; 可是结果就不是正确的了

麻烦大家给我讲一下吧
搜索更多相关的解决方案: 随机数  RANGE  MAX  int  RAND  

----------------解决方案--------------------------------------------------------
(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得到随机数
----------------解决方案--------------------------------------------------------
  相关解决方案