加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C/C++生成正态分布的随机数

(2012-11-29 10:04:11)
标签:

杂谈

分类: C/Cpp

方法1:


#include "math.h" // for RAND, and rand
double sampleNormal() {
double u = ((double) rand() / (RAND_MAX)) * 2 - 1;
double v = ((double) rand() / (RAND_MAX)) * 2 - 1;
double r = u * u + v * v;
if (r == 0 || r > 1) return sampleNormal();
double c = sqrt(-2 * log(r) / r);
return u * c;
}

 

方法2:


#define RANDU ((double) rand()/RAND_MAX)
#define RANDN2(mu, sigma) (mu + (rand()%2 ? -1.0 : 1.0)*sigma*pow(-log(0.99999*RANDU), 0.5))
#define
RANDN RANDN2(0, 1.0)

 

方法1和方法2都能生成正态分布的随机数,均值为0,方差为1;而且在VC6.0可通过,不必使用非库函数。

用于生成含高斯噪声的图像,方法1较好,方法2有条纹。

 

参考:http://stackoverflow.com/questions/2325472/generate-random-numbers-following-a-normal-distribution-in-c-c

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有