C++产生正态分布的随机数

方法一:
用[0,1]均匀分布模拟:
转自http://blog.xoyo.com/jaysara/article/295603.shtml

  double  gauss(doulbe mean, double  sigam, long   int  s)
{int i;
 
double x,y;
for(x=0.0;i=0;i<50;i++)
{x=x+uniform(0.0,1.0,s)
 x
=x-n/12;
 y
=mean+sigma*x}

}

 

方法2:

在CARMEN源代码里看到的,具体原理还没看,好像是拿个cos模拟正态分布

double  
carmen_gaussian_random(
double  mean,  double  std)
{
  
const double norm = 1.0 / (RAND_MAX + 1.0);
  
double u = 1.0 - rand() * norm;                  /* can't let u == 0 */
  
double v = rand() * norm;
  
double z = sqrt(-2.0 * log(u)) * cos(2.0 * M_PI * v);
  
return mean + std * z;
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值