C-怎么用纯C语言生成一个高斯随机数列?

项目合作 项目合作 主题:1030 回复:2135

C-怎么用纯C语言生成一个高斯随机数列?

夜无邪 发布于 2017-03-23 字数 0 浏览 971 回复 1

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(1

虐人心 2017-04-19 1 楼

首先,高斯随机数有如下特征,均值为0,方差为1。这个相对于标准分布的随机数来说的,
简单的说他们之间的区别只是随机数在区间内产生的概率不同。具体要说那个
区域概率大,那个区域概率小,翻翻概率的教材吧,上面有标准分布的图像,
至于gauss的概率分布图像,我想网上也能找到,或者数学教材上。
给你一个 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   &gt; =   1   ||   S   ==   0); 

X = V1 sqrt(-2 log(S) / S);
}

   else 
    X   =   V2   *   sqrt(-2   *   log(S)   /   S); 

phase = 1 - phase;

return X;
}