亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? newran.cpp

?? D-ITG2.4源代碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:

Real AddedRandom::Next() { return rv1->Next() + rv2->Next() ; }

ExtReal AddedRandom::Mean() const { return rv1->Mean() + rv2->Mean() ; }

ExtReal AddedRandom::Variance() const
   { return rv1->Variance() + rv2->Variance() ; }

Real SubtractedRandom::Next() { return rv1->Next() - rv2->Next() ; }

ExtReal SubtractedRandom::Mean() const { return rv1->Mean() - rv2->Mean() ; }

ExtReal SubtractedRandom::Variance() const
   { return rv1->Variance() + rv2->Variance() ; }

Real MultipliedRandom::Next() { return rv1->Next() * rv2->Next() ; }

ExtReal MultipliedRandom::Mean() const { return rv1->Mean() * rv2->Mean() ; }

ExtReal MultipliedRandom::Variance() const
{
   ExtReal e1 = square(rv1->Mean()); ExtReal e2 = square(rv2->Mean());
   ExtReal v1 = rv1->Variance(); ExtReal v2 = rv2->Variance();
   ExtReal r=v1*v2+v1*e2+e1*v2;
   return r;
}

Real DividedRandom::Next() { return rv1->Next() / rv2->Next() ; }

void Random::load(int*,Real*,Random**)
   { Throw(Logic_error("Newran: illegal combination")); }

void SelectedRandom::load(int* i, Real* probs, Random** rvx)
{
   probs[*i]=p; rvx[*i]=rv; (*i)++;
   delete this;
}

Real SelectedRandom::Next()
   { Throw(Logic_error("Newran: Next not defined")); return 0.0; }

Real AddedSelectedRandom::Next()
   { Throw(Logic_error("Newran: Next not defined")); return 0.0; }

Real RepeatedRandom::Next()
   { Real sum=0.0; for (int i=0; i<n; i++) sum += rv->Next(); return sum; }

MixedRandom::MixedRandom(int nx, Real* probs, Random** rvx)
{
   n = nx;
   rv = new Random*[n]; if (!rv) ErrorNoSpace();
   for (int i=0; i<n; i++) rv[i]=rvx[i];
   Build(probs);
}

MixedRandom::MixedRandom(AddedSelectedRandom& sr)
{
   n = sr.nelems();                       // number of terms;
   Real* probs = new Real[n]; rv = new Random*[n];
   if (!probs || !rv) ErrorNoSpace();
   int i=0; sr.load(&i,probs,rv);
   Build(probs); delete [] probs;
}

void MixedRandom::Build(Real* probs)
{
   int i;
   dg=new DiscreteGen(n,probs);
   if (!dg) ErrorNoSpace();
   mean=0.0; var=0.0;
   for (i=0; i<n; i++) mean = mean + (rv[i])->Mean()*probs[i];
   for (i=0; i<n; i++)
   {
      ExtReal sigsq=(rv[i])->Variance();
      ExtReal mudif=(rv[i])->Mean()-mean;
      var = var + (sigsq+square(mudif))*probs[i];
   }

}

MixedRandom::~MixedRandom()
{
   for (int i=0; i<n; i++) rv[i]->tDelete();
   delete dg; delete [] rv;
}

Real MixedRandom::Next()
   { int i = (int)(dg->Next()); return (rv[i])->Next(); }

int AddedSelectedRandom::nelems() const
   { return rv1->nelems() + rv2->nelems(); }

void AddedSelectedRandom::load(int* i, Real* probs, Random** rvx)
{
   rv1->load(i, probs, rvx); rv2->load(i, probs, rvx);
   delete this;
}

AddedSelectedRandom& operator+(SelectedRandom& rv1,
   SelectedRandom& rv2)
{
   AddedSelectedRandom* r = new AddedSelectedRandom(rv1, rv2);
   if (!r) ErrorNoSpace(); return *r;
}

AddedSelectedRandom& operator+(AddedSelectedRandom& rv1,
   SelectedRandom& rv2)
{
   AddedSelectedRandom* r = new AddedSelectedRandom(rv1, rv2);
   if (!r) ErrorNoSpace(); return *r;
}

AddedSelectedRandom& operator+(SelectedRandom& rv1,
   AddedSelectedRandom& rv2)
{
   AddedSelectedRandom* r = new AddedSelectedRandom(rv1, rv2);
   if (!r) ErrorNoSpace(); return *r;
}

AddedSelectedRandom& operator+(AddedSelectedRandom& rv1,
   AddedSelectedRandom& rv2)
{
   AddedSelectedRandom* r = new AddedSelectedRandom(rv1, rv2);
   if (!r) ErrorNoSpace(); return *r;
}

SelectedRandom& Random::operator()(double p)
{
   SelectedRandom* r = new SelectedRandom(*this, p);
   if (!r) ErrorNoSpace(); return *r;
}




// Identification routines for each class - may not work on all compilers?

char* Random::Name()            { return "Random";           }
char* Uniform::Name()           { return "Uniform";          }
char* Constant::Name()          { return "Constant";         }
char* PosGen::Name()            { return "PosGen";           }
char* SymGen::Name()            { return "SymGen";           }
char* AsymGen::Name()           { return "AsymGen";          }
char* PosGenX::Name()           { return "PosGenX";          }
char* SymGenX::Name()           { return "SymGenX";          }
char* AsymGenX::Name()          { return "AsymGenX";         }
char* Normal::Name()            { return "Normal";           }
char* ChiSq::Name()             { return "ChiSq";            }
char* Cauchy::Name()            { return "Cauchy";           }
char* Exponential::Name()       { return "Exponential";      }
char* Poisson::Name()           { return "Poisson";          }
char* Binomial::Name()          { return "Binomial";         }
char* NegativeBinomial::Name()  { return "NegativeBinomial"; }
char* Gamma::Name()             { return "Gamma";            }
char* Pareto::Name()            { return "Pareto";           }
char* DiscreteGen::Name()       { return "DiscreteGen";      }
char* SumRandom::Name()         { return "SumRandom";        }
char* MixedRandom::Name()       { return "MixedRandom";      }


// ********************** permutation generator ***************************

void RandomPermutation::Next(int N, int M, int p[], int start)
{
   // N = size of urn; M = number of draws
   if (N < M) Throw(Logic_error("Newran: N < M in RandomPermutation"));
   int i;
   int* q = new int [N];
   if (!q) ErrorNoSpace();
   for (i = 0; i < N; i++) q[i] = start + i;
   for (i = 0; i < M; i++)
   {
      int k = i + (int)(U.Next() * (N - i));       // uniform on i ... N-1
      p[i] = q[k]; q[k] = q[i];                    // swap i and k terms
                                                   // but put i-th term into p
   }
   delete [] q;
}

// from Sedgewick
void ShellSortAscending(int* a, int N)
{
   int h;
   for (h = 1; h <= N / 9; h = 3*h + 1) {}
   for (; h > 0; h /= 3) for (int i = h; i < N; ++i)
   {
      int v = a[i]; int j = i;
      while (j>=h && a[j-h] > v) { a[j] = a[j-h]; j-= h; }
      a[j] = v;
   }
}

void RandomCombination::SortAscending(int n, int gm[])
{
   ShellSortAscending(gm, n);
}

//***************** Generators with variable parameters ********************

VariPoisson::VariPoisson() : P100(100.0), P200(200.0) {}

int VariPoisson::iNext_very_small(Real mu)
{
   // mu is expected value of Poisson random number
   // Efficient when mu is small
   // generate a Poisson variable with mean mu
   if (mu == 0) return 0;
   Real t = exp(-mu); int k = 0; Real u = U.Next();
   for (Real s = t; s < u; s += t) { ++k; t *= mu / k; }
   return k;
}

int VariPoisson::iNext_small(Real mu)
{
   // mu is expected value of Poisson random number
   // Efficient when mu is reasonably small
   // generate a Poisson variable with mean mu
   // start iteration at mode
   if (mu < 10) return iNext_very_small(mu);
   int k_start = (int)mu;  Real u = U.Next();
   Real t1 = exp(k_start * log(mu) - mu - ln_gamma(k_start+1));
   if (t1 > u) return k_start;
   int k1 = k_start; int k2 = k_start; Real t2 = t1; Real s = t1;
   for(;;)
   {
      ++k1; t1 *= mu / k1; s += t1; if (s > u) return k1;
      if (k2 > 0) { t2 *= k2 / mu; --k2; s += t2; if (s > u) return k2; }
   }
}

int VariPoisson::iNext_large(Real mu)
{
   // mu is expected value of Poisson random number
   // reasonably accurate when mu is large, but should try to improve
   // generate a Poisson variable with mean mu
   // method is to start with normal variable X and use X with prob 1/3
   // and X**2 with prob 2/3. In each case X has mean and variance to
   // agree with Poisson rv after adjusting with Sheppard's correction

   const Real sc = 1.0 / 12.0;        // Sheppard correction
   int k;
   if (U.Next() > 1.0 / 3.0)
   {
      Real musc = 0.5 * (mu - sc); Real meansq = sqrt(mu * mu - musc);
      Real sigma = sqrt(musc / (mu + meansq));
      k = (int)floor(square(N.Next() * sigma + sqrt(meansq)) + 0.5);
   }
   else k = (int)floor(N.Next() * sqrt(mu - sc) + mu + 0.5);
   return k < 0 ? 0 : k;
}

int VariPoisson::iNext(Real mu)
{
   if (mu <= 0)
   {
      if (mu == 0) return 0;
      else Throw(Logic_error("Newran: illegal parameters"));
   }
   if (mu < 10) return iNext_very_small(mu);
   else if (mu < 100) return iNext_small(mu);
   else if (mu < 200)
   {
      // do in two statements so order of evaluation is preserved
      int i = (int)P100.Next();
      return i + iNext_small(mu - 100);
   }
   else if (mu < 300)
   {
      // do in two statements so order of evaluation is preserved
      int i = (int)P200.Next();
      return i + iNext_small(mu - 200);
   }
   else return iNext_large(mu);
}

VariBinomial::VariBinomial() {}

int VariBinomial::iNext_very_small(int n, Real p)
{
   // Efficient when n * p is small
   // generate a Binomial variable with parameters n and p

   Real q = 1 - p; if (q == 0) return n;
   Real r = p / q; Real t = pow(q, n); Real s = t;
   Real u = U.Next();
   for (int k = 0; k <= n; ++k)
   {
      if (s >= u) return k;
      t *= r * (Real)(n - k) / (Real)(k + 1);
      s += t;
   }
   return 0;    // can happen only if we have round-off error
}

int VariBinomial::iNext_small(int n, Real p)
{
   // Efficient when sqrt(n) * p is small
   // Assume p <= 1/2
   // same as small but start at mode
   // generate a Binomial variable with parameters n and p

   Real q = 1 - p; Real r = p / q; Real u = U.Next();
   int k_start = (int)( (n * r) / (r + 1) );
   Real t1 = exp( ln_gamma(n+1) - ln_gamma(k_start+1) - ln_gamma(n-k_start+1)
      + k_start * log(p) + (n-k_start) * log(q) );
   if (t1 >= u) return k_start;
   Real t2 = t1; Real s = t1;
   int k1 = k_start; int k2 = k_start;
   for (;;)
   {
      t1 *= r * (Real)(n - k1) / (Real)(k1 + 1); ++k1; s += t1;
      if (s >= u) return k1;
      if (k2)
      {
         --k2; t2 *= (Real)(k2 + 1) / (Real)(n - k2) / r; s += t2;
         if (s >= u) return k2;
      }
      else if (k1 == n) return 0;  // can happen only if we have round-off error
   }
}

int VariBinomial::iNext(int n, Real p)
{
   if (p > 0.5) return n - iNext(n, 1.0 - p);

   if (n <= 0 || p <= 0)
   {
      if (n < 0 || p < 0) Throw(Logic_error("Newran: illegal parameters"));
      else return 0;
   }

   Real mean = n * p;
   if (mean <= 10) return iNext_very_small(n, p);
   else if (mean <= 200) return iNext_small(n, p);
   else return iNext_large(n,p);

}

// probably not sufficiently accurate
int VariBinomial::iNext_large(int n, Real p)
{
   const Real sc = 1.0 / 12.0;        // Sheppard correction
   Real mean = n * p;
   Real sd = sqrt(mean * (1.0 - p) - sc);
   return (int)floor(N.Next() * sd + mean + 0.5);
}

Real VariLogNormal::Next(Real mean, Real sd)
{
   // should have special version of log for small sd/mean
   Real n_var = log(1 + square(sd / mean));
   return mean * exp(N.Next() * sqrt(n_var) - 0.5 * n_var);
}






#ifdef use_namespace
}
#endif


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美性videosxxxxx| 亚洲激情图片一区| 美女视频网站黄色亚洲| 欧美日韩精品二区第二页| 夜夜嗨av一区二区三区四季av| 丁香一区二区三区| 国产日韩欧美精品综合| 风间由美一区二区av101| 久久免费电影网| 国产精品一级黄| 国产精品欧美极品| 99视频在线精品| 一区二区三区国产精品| 欧美最猛黑人xxxxx猛交| 亚洲一区在线观看免费观看电影高清 | 精品一区二区在线免费观看| 91精品国产色综合久久ai换脸 | 777午夜精品免费视频| 亚洲免费在线播放| 欧美日韩一区二区三区视频| 亚洲成人自拍偷拍| 欧美福利一区二区| 久久国产三级精品| 国产欧美日韩不卡免费| 91香蕉视频在线| 夜夜嗨av一区二区三区网页| 91豆麻精品91久久久久久| 亚洲一区二区在线观看视频 | 国产精品影音先锋| 国产人妖乱国产精品人妖| 99久久精品免费看国产免费软件| 一区二区三区在线播| 欧美精选一区二区| 国产一区在线不卡| 亚洲精品视频免费看| 制服视频三区第一页精品| 国产一区二区调教| 一区二区三区视频在线看| 欧美日韩国产在线播放网站| 国产精品一品视频| 亚洲午夜久久久久中文字幕久| 日韩欧美国产电影| 成人精品国产一区二区4080| 亚洲一区二区三区三| 日韩欧美国产综合一区 | 亚洲一区二区综合| 精品久久一区二区| 色88888久久久久久影院野外| 欧美a一区二区| 久久精品亚洲国产奇米99| 久久久久国产精品人| 色婷婷综合在线| 麻豆精品国产传媒mv男同| 国产精品电影一区二区三区| 欧美一区二区三区不卡| 91片黄在线观看| 精品一区二区在线免费观看| 亚洲一区视频在线| 国产精品色噜噜| 精品理论电影在线观看| 欧美日韩综合一区| av毛片久久久久**hd| 极品美女销魂一区二区三区免费| 一区二区三区**美女毛片| 国产午夜精品久久久久久免费视| 欧美日韩国产电影| 色av成人天堂桃色av| 成人黄色777网| 极品少妇xxxx精品少妇偷拍| 日韩不卡免费视频| 亚洲狠狠爱一区二区三区| 自拍av一区二区三区| 国产日韩欧美不卡| 欧美久久久久久久久久| 欧美午夜精品一区二区三区| 99久久伊人精品| 成人黄色综合网站| 国产精品99久久久久久久女警 | 久久国产精品区| 亚洲在线视频网站| 亚洲三级小视频| 国产精品无圣光一区二区| 久久久久国产精品麻豆| 精品福利av导航| 精品国产免费一区二区三区香蕉| 欧美日韩国产一级| 欧美电影影音先锋| 欧美精品在线观看一区二区| 欧美日本韩国一区| 在线成人av网站| 制服丝袜亚洲播放| 欧美变态口味重另类| 久久综合九色综合97婷婷| 欧美三级日韩在线| 欧美日韩一区三区四区| 欧美日韩情趣电影| 欧美日韩国产高清一区二区三区 | 欧美专区日韩专区| 日本精品一区二区三区四区的功能| 99国产精品久久| 欧美在线观看禁18| 欧美性大战xxxxx久久久| 欧美喷水一区二区| 日韩视频中午一区| 91精品蜜臀在线一区尤物| 91黄色免费网站| 91精品啪在线观看国产60岁| 欧美日韩亚洲丝袜制服| 日韩一级大片在线| 日韩午夜av电影| 日韩一级完整毛片| 国产亚洲1区2区3区| 精品国产91洋老外米糕| 国产偷国产偷亚洲高清人白洁 | 成人欧美一区二区三区白人| 亚洲美女电影在线| 午夜电影网一区| 美女视频一区在线观看| 国产激情视频一区二区三区欧美| 成人av在线一区二区三区| 欧美在线综合视频| 日韩欧美在线1卡| 国产精品久久久久久久久动漫 | 91精品中文字幕一区二区三区| 精品免费国产二区三区| 国产精品久久夜| 天堂一区二区在线| 懂色av一区二区在线播放| 欧美性做爰猛烈叫床潮| 久久综合狠狠综合久久综合88 | 国产精品久久福利| 亚洲va在线va天堂| 国产精品99久久久久久久女警| 色www精品视频在线观看| 欧美精品一区二区三| 亚洲天堂久久久久久久| 麻豆成人av在线| 91视频精品在这里| 日韩欧美在线网站| 一区二区三区波多野结衣在线观看 | 精品三级av在线| 亚洲黄网站在线观看| 国产乱人伦偷精品视频免下载| 国产91丝袜在线观看| 日本高清无吗v一区| 久久久激情视频| 麻豆一区二区三| 欧美午夜影院一区| 中文字幕亚洲一区二区av在线 | 日韩精品乱码免费| eeuss国产一区二区三区| 精品国产一区二区三区不卡| 亚洲一区二区三区四区中文字幕| 国产一区二区主播在线| 欧美精品一卡二卡| 一区二区三区色| 成人免费毛片高清视频| 精品久久久久av影院| 亚洲视频免费在线| 国内外成人在线| 欧美日韩亚洲综合在线 | 在线综合亚洲欧美在线视频| 亚洲女爱视频在线| 不卡大黄网站免费看| 久久久三级国产网站| 免费高清成人在线| 欧美电影影音先锋| 亚洲va在线va天堂| 在线视频国产一区| 亚洲精品成人悠悠色影视| 高清久久久久久| 久久女同精品一区二区| 精品一区免费av| 欧美不卡在线视频| 蜜臀av一级做a爰片久久| 欧美一级精品在线| 美女视频黄频大全不卡视频在线播放| 欧美视频在线不卡| 国产精品美女久久久久久久久| 天堂av在线一区| 欧美另类高清zo欧美| 香蕉av福利精品导航| 91精品国产全国免费观看| 免费人成在线不卡| 精品免费一区二区三区| 久久福利资源站| 久久网站热最新地址| 国产精品自在欧美一区| 国产欧美一区二区三区鸳鸯浴 | 成人h动漫精品| 自拍偷自拍亚洲精品播放| 99国产精品久久| 亚洲国产三级在线| 日本韩国欧美三级| 天堂一区二区在线免费观看| 日韩色视频在线观看| 国产高清久久久| 亚洲欧美韩国综合色| 在线免费不卡电影| 美女网站一区二区|