标题:[讨论]有关生成随机数的问题
只看楼主
可见光
Rank: 1
等 级:新手上路
帖 子:143
专家分:0
注 册:2007-6-15
 问题点数:0 回复次数:7 
[讨论]有关生成随机数的问题
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 
2007-10-13 13:41
copu1
Rank: 1
等 级:新手上路
帖 子:51
专家分:0
注 册:2007-10-8
得分:0 
(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吧!没有深研究过。

2007-10-13 14:02
心剑菩提
Rank: 1
等 级:新手上路
帖 子:249
专家分:0
注 册:2007-5-17
得分: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

前世五百次的回眸 才换来今生的擦肩而过
2007-10-13 14:05
心剑菩提
Rank: 1
等 级:新手上路
帖 子:249
专家分:0
注 册:2007-5-17
得分:0 

这是生成随即数的函数及方法


前世五百次的回眸 才换来今生的擦肩而过
2007-10-13 14:15
cutboy
Rank: 1
等 级:新手上路
帖 子:120
专家分:0
注 册:2007-9-16
得分:0 
你看那段代码不科学.怎么说也要
(((double) rand() / (double) (RAND_MAX+1),其实RAND_MAX就是RAND()产生的值.

2007-10-13 18:56
cutboy
Rank: 1
等 级:新手上路
帖 子:120
专家分:0
注 册:2007-9-16
得分:0 
不好意思.搞错了.RAND_MAX不是RAND()的返回值

2007-10-13 19:01
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
得分:0 

不懂啊````

RANGE_MIN
RANGE_MAX

这2个是自己定义的吗?```

产生随机数一般有什么用啊``


女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-10-13 19:47
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
得分:0 
用srand初始化随机数种子

再用rand得到随机数

偶学编程,也许本身就是一个错。。。
2007-10-13 19:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-177273-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026549 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved