当前位置:  技术问答>linux和unix

关于产生随机数的函数srand()函数问题

    来源: 互联网  发布时间:2016-04-14

    本文导语:  为什么有时候设置种子的时候写的是srand(getpid())?是什么意思? 如果这样设置,每次运行返回的随机数序列是否一样? | 参数srand的作用就是给rand()提供种子. 函数一:int rand(void); 从srand (se...

为什么有时候设置种子的时候写的是srand(getpid())?是什么意思?
如果这样设置,每次运行返回的随机数序列是否一样?

|
参数srand的作用就是给rand()提供种子.

函数一:int rand(void);
从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。

函数二:void srand(unsigned seed);
参数seed是rand()的种子,用来初始化rand()的起始值。

可以认为rand()在每次被调用的时候,它会查看:
1) 如果用户在此之前调用过srand(seed),给seed指定了一个值,那么它会自动调用
srand(seed)一次来初始化它的起始值。
2) 如果用户在此之前没有调用过srand(seed),它会自动调用srand(1)一次。

根据上面的第一点我们可以得出:
1) 如果希望rand()在每次程序运行时产生的值都不一样,必须给srand(seed)中的seed一个变值,这个变值必须在每次程序运行时都不一样(比如到目前为止流逝的时间)。
2) 否则,如果给seed指定的是一个定值,那么每次程序运行时rand()产生的值都会一样,虽然这个值会是[seed, RAND_MAX(0x7fff))之间的一个随机取得的值。
3) 如果在调用rand()之前没有调用过srand(seed),效果将和调用了srand(1)再调用rand()一样(1也是一个定值)。

|
如果getpid()的返回值一样,那返回的随机数应该就是一样的。

|
伪随机数 

|
种子不一样,返回的随机数也不一样,主要起这个作用吧.

|
getpid 返回调用进程的ID号,可能会一样。
返回的随机数的序列不管传入的种子是否一样都不应该一样,否则这个函数就不能
叫这个名字了

|
getpid()取得进程号,每次运行进程,它得到的进程号吗会不同(也可能相同,比如说关了又开的时候),
这样设置种子后,每次随机取得的值就不同了

|
如果在同一次进程内这样调用,那产生的伪随机数列也是相同的。
伪随机数列的种子值相同,产生的伪随机数列也是相同的。

|
re:LZ
srand() in order to choose a number to become seed.

I think because getpid()'s value is hard to same when this process is called every time,so it's no problem.
If this process always live,it just involve the seed,of course, it make impact on the trajectory of the random numbers.but what's the big deal?

If you care,suggest you use getdate() as random numbers' seed.

|
还是用时间作为种子吧,这样更安全些啊

srand(time(NULL))

|

顶这个

|
得看实际使用的需求。如果在一次运行程序里就是要求随机序列一样楼主的方法很好,如果要求每次都不一样,可以考虑srand(time(null));

这跟安全没有任何关系啊,我srand(1)最安全,加一个time还有可能出错呢。


|
srand是给rand()函数设置种子的, 如果设置的种子值为一个定值,则每次rand返回的随机序列是相同的.

getpid()在每次程序重新运行的时候显然会和前一次运行的时候不一样.



    
 
 

您可能感兴趣的文章:

  • 关于accept()函数能产生多少个套接字和在LINUX 能产生多少个线程
  • 嵌入式linux中频繁调用sync函数会产生什么后果?
  • 关于linux和windown的随机数产生函数的弱智问题?
  • php is_numberic函数产生sql注入漏洞怎么解决
  • 程序产生core文件,但是无法跟踪到函数堆栈信息,不知大虾有没有遇到过
  • 为什么编译c库函数总是出现大量的语法错误?错误都是产生在C库函数的头文件。
  • C#短时间内产生大量不重复的随机数
  • 怎样产生一随机数,请教
  • 高分求救!一个随机数产生的问题
  • 如何产生随机数啊?
  • 用C#在短时间内产生大量不重复的随机数的方法
  • Random连续产生相同随机数的解决方法
  • C++产生随机数的实现代码
  • 谁知道这是怎么回事情?Random类产生的随机数太怪了
  • C语言/C++中如何产生随机数
  • c#循环中产生伪随机数
  • C/C++产生指定范围和不定范围随机数的实例代码
  • 请给一个随机数产生的java程序?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • **简单问题,怎样在TextField的内容改变时产生响应**
  • 编程语言 iis7站长之家
  • 问一个很基础的问题,单进程会不会产生死锁?
  • 救急!中文问题!!utf-8编码转成GBK,因为位数不同而产生字符丢掉问题!!
  • 普通的makefile产生的怪异问题
  • linux下产生了太多对某一端口已建立的链接,会不会有问题?
  • 天啊,又是中文问题:utf-8编码转成GBK,因为位数不同而产生字符丢掉问题!!
  • 浏览器自动转换URL编码产生乱码问题的解决办法
  • 请教关于 linux pppoe产生僵尸进程的问题
  • 在linux下tomcat自启动产生乱码问题
  • 由信号量产生的问题:能否更改操作系统的默认行为,当进程非正常退出时,都能够产生core文件?
  • 问一个关于多进程中通信产生冲突等方面的问题
  • 把RetHat linux 安装在C盘产生的问题。
  • 小问题:如何用数字和字母混合产生系统唯一的10位id值
  • 在调用数据库时和jsp页面时产生乱码的的问题???
  • 还是个简单的问题,如何产生一组随机的STRINGS!
  • php+ajax导入大数据时产生的问题处理
  • 接着请教jni的问题,使用vc时编译产生错误?!
  • 问题严重啊!!!tomcat下正常,Weblogic下产生错误---->>>>关于Iteration Tag的!!
  • 添加一个内核模块产生的错误问题
  • ScoOpenServer下的进程产生core,如何判断是哪个程序产生的?
  • SIGRTMIN-SIGRTMAX的信号,是OS产生的,还是用户程序产生的?
  • unix下如何利用core文件找到产生它的具体程序及产生错误的代码位置
  • 在LINUX/UNIX中僵尸进程是如何产生的?怎样才能避免僵尸进程的产生?
  • 雷老虎,我实在想不通下面代码了:为什么产生产生的号码一样?(有时候前几组一样,后几组一样)
  • 如何让系统不产生core文件?
  • 为什么带s位的程序段错误产生不了core文件?
  • JavaBean 不能产生适配器
  • 产生信号的键盘方式?
  • linux编译产生的.o.cmd文件有什么作用?
  • 如何产生一个临时文件名?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3