免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 52112 | 回复: 4
打印 上一主题 下一主题

[函数] rand()函数产生的最大值是RAND_MAX,请问这个值最大是多少,怎么修改 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2007-10-03 10:36 |显示全部楼层
原帖由 chsw1984 于 2007-10-3 10:33 发表
这个值无需修改,我们要选取我们范围内的 随机数时可以使用一下方法。
假设取值范围是 0-8 则 rand()%8

rand() % 9

论坛徽章:
0
2 [报告]
发表于 2007-10-03 10:48 |显示全部楼层
原帖由 chinesedragon 于 2007-10-3 10:37 发表
我发现这个产生的随机数并不是随机的。
多次运行产生的数是一样的。(多次指程序结束后,再运行)

这是伪随机数,不是真正的随机数
另外,你的问题是因为没有设置伪随机数的种子,请参考srand函数,一般以系统时钟作为种子

论坛徽章:
0
3 [报告]
发表于 2007-10-03 10:53 |显示全部楼层
原帖由 cc007c 于 2007-10-3 10:36 发表
问题是如果我要去一个(0,1000000)间的随机数,用rand能不能取到这么大的值

在VC6中,RAND_MAX值是0x7fff,所以直接用是不行的
你可以这样使用:(int)((double)rand() / RAND_MAX * N) (N为你期望的最大数)

论坛徽章:
0
4 [报告]
发表于 2007-10-03 10:54 |显示全部楼层
原帖由 chinesedragon 于 2007-10-3 10:54 发表

我这样srand(100)效果是一样的,我再查查srand的资料去。

你种子一样,当然每次的结果一样,我说了用系统时钟,原因是系统时钟随时在变化

论坛徽章:
0
5 [报告]
发表于 2007-10-03 11:46 |显示全部楼层
原帖由 chinesedragon 于 2007-10-3 11:07 发表

你是说这样吧,srand(time(0))。
资料上都是time(0),想问一下,time(1)是什么 ?
time_t time( time_t *timer );

Return Value
time returns the time in elapsed seconds. There is no error return.

Parameter
timer

Storage location for time. The return value is stored in the location given by timer. This parameter may be NULL, in which case the return value is not stored.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP