怎样产生标准分布或高斯分布的随机数?

怎样产生标准分布或高斯分布的随机数?

这里有一个由Marsaglia 首创Knuth 推荐的方法:

#include  <stdlib.h>
#include  <math.h>
double  gaussrand()
{
	static  double  V1,  V2,  S;
	static  int  phase  =  0;
	double  X;
	if(phase  ==  0)
	{
		do 
		{
			double  U1  =  (double)rand()  /  RAND_MAX;
			double  U2  =  (double)rand()  /  RAND_MAX;
			V1  =  2  *  U1  -  1;
			V2  =  2  *  U2  -  1;
			S  =  V1  *  V1  +  V2  *  V2;
		}
		while(S  >=  1  ||  S  ==  0);
		X  =  V1  *  sqrt(-2  *  log(S)  /  S);
	}
	else
	{
		X  =  V2  *  sqrt(-2  *  log(S)  /  S);
	}
	phase  =  1  -  phase;
	return  X;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值