[问题]C语言生成随机数的问题

软件和网站开发以及相关技术探讨
回复
piston47
帖子: 25
注册时间: 2007-06-20 16:16

[问题]C语言生成随机数的问题

#1

帖子 piston47 » 2007-12-19 22:11

因为要做一个小软件,需要生成随机数,请问使用
srand( ( unsigned )time( NULL ) ) rand( )
两个函数生成的随机数的范围是在多少?在VC下貌似是 0 ~ 32767,但我在GCC下试的时候数字好像很大,都在七到八位的样子,哪位大侠清楚C语言随机数生成机制的麻烦指导一下,不胜感激。
PS:因为是做一个仿真软件,需要的是绝对随机,就是每个数字的出现概率是相等的,不知道C的随机数生成机制是否符合这个条件?
hufeng
帖子: 3
注册时间: 2007-12-16 22:49

#2

帖子 hufeng » 2007-12-20 22:57

直接用random(),或rand()就可以了阿

rand() % num; 就会产生一个0--num的随机数

random(num)与上述功能一置
zhangsong023
帖子: 768
注册时间: 2006-09-20 19:56

Re: [问题]C语言生成随机数的问题

#3

帖子 zhangsong023 » 2007-12-23 17:38

piston47 写了:绝对随机
都是伪随机。
piston47 写了:就是每个数字的出现概率是相等的
均匀分布。
头像
hubert_star
论坛版主
帖子: 5373
注册时间: 2007-10-29 22:12
系统: OSX 10.9 + Ub 1304
来自: 江苏南京

#4

帖子 hubert_star » 2007-12-23 18:25

要模拟绝对随机,这个可是世界性难题,楼主需求太强大了
或者你用/dev/urandom帮你产生一个?
佛经说,人有八苦: 生、老、病、死、求不得、怨憎、爱别离、五阴盛 故我苦!
圣经说,人有七罪: 饕餮、贪婪、懒惰、淫欲、傲慢、嫉妒和暴怒  故我有罪!

我这篇帖子里面没有任何攻击我们伟大的中华人民共和国政府和任劳任怨的人民公仆(和本论坛高素质的版主)的文字和含义;

特此声明!

有些事,我们明知道是错的,也要去坚持,因为不甘心;有些人,我们明知道是爱的,也要去放弃,因为没结局;有时候,我们明知道没路了,却还在前行,因为习惯了。

欢迎来我的新浪微博@me
wangqi0021
帖子: 156
注册时间: 2007-09-05 1:09
来自: beijing

#5

帖子 wangqi0021 » 2007-12-26 16:18

没有真随机
piston47
帖子: 25
注册时间: 2007-06-20 16:16

#6

帖子 piston47 » 2008-01-05 19:00

已经找到解决的方法了,因为没有真正的随机,最后只能用rand( )%1000模拟一个0~1000的随机数
zhangsong023
帖子: 768
注册时间: 2006-09-20 19:56

#7

帖子 zhangsong023 » 2008-01-05 21:36

产生符合给定分布的伪随机序列算法很多,但产生均匀分布的伪随机序列是很多算法的基础。

rand()用的MS是混合同余的办法,很多时候,在特定周期中,生成的伪随机序列相关系数还是比较大的,如果对非退化、相关系数等要求很高,还是自己写来得好,比如采用MT算法(那篇论文具体名字忘了)。

不过好的算法都不会像线性同余那样简单,要花些时间看才成。
回复