求【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) |