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

紧急!! rand_r函数生成的随机数怎么都是同一个数???

    来源: 互联网  发布时间:2015-12-13

    本文导语:  问题如标题, 代码如下: #include  #include  #include  int main() {   unsigned int a;   int r = rand_r(&a);   printf("r is:%dn", r);   return 0; } | 理论上,无序的随机事件是无法用有序的程序来模拟的,当然rand/...

问题如标题, 代码如下:

#include 
#include 
#include 

int main() {
  unsigned int a;

  int r = rand_r(&a);
  printf("r is:%dn", r);

  return 0;
}

|
理论上,无序的随机事件是无法用有序的程序来模拟的,当然rand/srand也不例外,它们只可以从一个起始数(用一个近似算法)连续推导出不同的数(这些数只能保证在整个样本空间是均匀分布的),但算法本身是固定的,如果起始数固定我们想就可以知道,结果数据序列一定是相同的序列。这种伪随机算法实际上不具有太大的现实意义,srand给你一种选择就是自己使用自己的起始数,这样如果起始数随机,那么随后产生的数也是随机的了。但寻找这样的起始数(随机种子)太困难。楼上提到用time秒数做随机数,如果你的程序不是固定在某个时刻启动,那么调用time的时刻就是随机的(是因为你运行该进程的时刻是随机的,这个才是真正的随机事件源)。现在很多主板有一个芯片(random number generator)用来产生随机数,这个就比较好,他可能定时向数据或地址总线去查询电信号,莱得到数值。使用/dev/接口可以读取。

|
在rand之前加上下面這一句
 srand ((unsigned) time (NULL));

|
应该要初始化一下rand函数吧。

|
在rand之前加上下面這一句
 srand ((unsigned) time (NULL));

也可以读/dev/random 或/dev/urandom 产生随机数
http://blog.chinaunix.net/u/6593/showart.php?id=150290

|
srand()

要先用这个来产生随即数的种子

|
说得够清楚了,这个问题在C版出现过很多很多。

|
顶一顶楼上的。:P

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


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

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

    浙ICP备11055608号-3