產生滿足常態分佈的隨機數

來源:互聯網
上載者:User
一般有兩種演算法:  
  演算法一產生12個(0,1)平均分布的隨機函數,用大數定理可以類比出常態分佈。  
  演算法二用到了數學中的雅可比變換,直接產生常態分佈,但此演算法在計算很大規模的數時 會出現溢出錯誤。
附加代碼:  #include   <math.h>  
  #include   <stdio.h>  
  #include   <conio.h>  
  #include   <stdlib.h>  
  #include   <time.h>  

  #define M_PI 3.14159265358979323846

  double   _random(void)  
  {  
    int   a;  
    double   r;  
   
    a=rand()%32767;  
    r=(a+0.00)/32767.00;  
   
    return   r;  
   
  }  
   
  double   _sta(double   mu,double   sigma)  
  {  
    int   i;  
    double   r,sum=0.0;  
   
    if(sigma<=0.0)   {   printf("Sigma<=0.0   in   _sta!");   exit(1);   }  
    for(i=1;i<=12;i++)  
    sum   =   sum   +   _random();  
    r=(sum-6.00)*sigma+mu;  
   
    return   r;  
   
  }  
   
  double   _sta2(double   mu,double   sigma)  
  {  
    double   r1,r2;  
   
    r1=_random();  
    r2=_random();  
   
    return   sqrt(-2*log(r1))*cos(2*M_PI*r2)*sigma+mu   ;  
   
  }  
   
   
  int   main()  
  {  
  int   i;  
  double   mu,sigma;  
   
  srand(   (unsigned)time(   NULL   )   );  
  mu=0.0;  
  sigma=1.0;  
  printf("Algorithm   1:\n");  
  for(i=0;i<10;i++)  
  printf("%lf\t",_sta(mu,sigma));  
  printf("Algorithm   2:\n");  
  for(i=0;i<10;i++)  
  printf("%lf\t",_sta2(mu,sigma));  
  return   0;  
   
  }

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.