Chinaunix首页 | 论坛 | 博客
  • 博客访问: 27908
  • 博文数量: 7
  • 博客积分: 170
  • 博客等级: 入伍新兵
  • 技术积分: 100
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-07 23:44
文章分类

全部博文(7)

文章存档

2011年(7)

我的朋友

分类: C/C++

2011-09-15 08:58:55

求【0,1】区间内的均匀分布的随机数;
 
算法思路:
关于均匀分布的随机数,当时做的时候,感到了疑惑,我一直以为是相邻两项之差相等,后来查了查,均匀分布的随机数是指:
我们用计算机求解的随机数,通常称作伪随机数,并不是真正的随机数,一般都是我们输进去一个真随机数,然后通过公式的迭代等方法,产生的伪随机数。均匀分布是在【0,1】区间内,任意随机数在一半跟另一半产生的概率相等。然而我们的计算机是不能做到那么精确的,所以只能近似的是随机数,但是也算挺好的,所以一般我们产生的都是伪随机数,比如这道题的方法:
 
采用一个公式计算均匀分布的随机数,此处令 m=2(16) (此处为2的16次方)
r(i)=(2053*r(i-1)+13849)%m;
p(i)=r(i)/m;
 
下面是代码:
 
double rnd(double *r)//r指向随机数种子,也就是我们提供的真随机数
{
     double p,m,u,v;
     m=65536; u=2053.0;v=13849.0;
     *r=(*r*u+v)%m;  //此处的r是变化的
     p=*r/m;
     return p;
}
 
阅读(3557) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~