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有条纹。
前一篇:调整公式与文本之间的距离
后一篇:NSFC笔记