本文主要是介绍生成正态随机分布数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
double Normal_rand(double u, double d, int nnum_i)
{//生成一个以u为均值,d为均方差的正态随机数,大数取nnum_iif(d<=0)return(u);int nnum=nnum_i;double sum_nnum=0.0;int i;//srand((unsigned)time(NULL));for(i=0;i<nnum;i++){ sum_nnum+=(double)rand()/RAND_MAX;}/////以下采取了中心极限定理,//由多个均匀分布产生服从正态的随机数,//均匀分布均值是0.5,方差是1/12,//n个均匀分布的随机变量和减(n*0.5)//再除以根号下n*(1/12)应当近似服从N(0,1),//在此n取nnum//return(u+d*(sum_nnum-nnum/2)/(double)sqrt(nnum/12));
}double Normal_rand(double u,double d)
{//生成一个以u为均值,d为均方差的正态随机数x,采用反函数法 double u1,u2,z,x;if(d<=0)return(u);u1=(double)rand()/(double)RAND_MAX;u2=(double)rand()/(double)RAND_MAX;if(u1>0.0000000000000000)z=sqrt(-2*log(u1))*sin(2*Pi*u2);else z=0;x=u+d*z;return(x);
}
这篇关于生成正态随机分布数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!