如何能产生个高斯分布呢

怎么能产生个高斯分布呢?
不是一个图谱的那种,我是想要个累加形式的高斯分布,每次循环产生0~1024道的单道的计数,每次产生的单道计数n>=1;然后要求最后每道的累加和分布呈现是高斯函数形式的?

------解决方案--------------------
明白,这个有意思,试一下先!
------解决方案--------------------
C/C++ code

#include <cmath>

const double PI = 3.141592654;        //圆周率

//分布方程
double CDrawLayoutDlg::Layout(double x)
{
    if(!UpdateData())    return 0;
    double CONA = 1/( sqrt(2*PI)*m_fEditSigema ) ;
    double CONC = 2 * m_fEditSigema * m_fEditSigema;
    double rtn = CONA * exp(-pow(x-m_fEditMu,2)/CONC);
    return rtn;
}

//积分函数
double CDrawLayoutDlg::FintegralEx(double x1,double x2,double delta)
{
    double rtn = 0;
    for (double n = x1;x2-n>(delta/2);n+=delta)
    {
        rtn += delta*Layout(n);
    }
    return rtn;
}

//范围包含查找,折半查找法
int CDrawLayoutDlg::FindHalf(int* pData,int iLen,int iFind)
{
    if(iLen <= 1){
        return (pData[0] <= iFind)?1:0;
    }
    if (pData[iLen/2 - 1] <= iFind && iFind< pData[iLen/2]){
        return iLen/2;
    }
    else if(iFind < pData[iLen/2 - 1]){
        return FindHalf(pData,iLen/2,iFind);
    }
    else{
        return iLen/2 + FindHalf(pData + iLen/2,(iLen+1)/2,iFind);
    }
}

//主函数
void CDrawLayoutDlg::OnBtnDraw()
{
    // TODO: Add your control notification handler code here
    if(!UpdateData())    return;

    //负无穷到正无穷积分,其实不是真的要算,只是验证一下积出来是否等于1
    // -5 到 5 ,积出来是0.999999
    double fTotalEx = FintegralEx(-5,5,0.001);

    double fDelta[1000];    //存放各个区间的几率

    int i=0;
    double n;
    for (n = -5;n<5-0.01;n+=0.01,++i)    //求各区间几率
    {
        fDelta[i] = FintegralEx(n,n+0.01,0.001);
    }

    int iDeltaSpr[1000];    //存放各个区间的分隔数
    double fOdds=0;
    for (i=0;i<1000;++i)        //通过几率求分隔数
    {
        fOdds+=fDelta[i];
        iDeltaSpr[i] = int(RAND_MAX * fOdds);
    }

    int iRand;
    srand(time(0));
    int iCount[1000];        //存放各个区间的出现次数
    ZeroMemory(iCount,1000*4);
    for (i=0;i<m_iEditTestCnt;++i)    //循环N次,得结果
    {
        iRand = rand();
        iCount[FindHalf(iDeltaSpr,1000,iRand)]++;
    }

    CRect rt;                        //显示结果
    GetClientRect(rt);
    CClientDC dc(this);
//    double fScale=double(rt.Height())*0.8/ iCount[500];    //显示的比例
    for (i=0;i<1000;++i)
    {
        dc.MoveTo(i,rt.Height() - 10);
        dc.LineTo(i,rt.Height() - 10-iCount[i]);            //输出测试图,看最终结果
        //dc.LineTo(i,rt.Height() - 10-fDelta[i]*20000);    //输出几率图,看中间结果
    }
}