-static void precal_alpha(mc_aux_t *ma) // \alpha[k]=\binom{M}{k}\sum_l\phi_l(l/M)^k(1-l/M)^{M-k}
-{
- int k, l;
- memset(ma->alpha, 0, sizeof(double) * (ma->M + 1));
- for (l = 0; l <= ma->M; ++l)
- ma->alpha[0] += ma->phi[l] * pow(1. - (double)l / ma->M, ma->M);
- for (k = 1; k < ma->M; ++k) {
- for (l = 1; l < ma->M; ++l) { // for k!=0 and k!=ma->M, l=0 and l=ma->M leads to zero
- double x = exp((lgamma(ma->M + 1) - lgamma(k + 1) - lgamma(ma->M - k + 1))
- + k * log((double)l / ma->M)
- + (ma->M - k) * log(1. - (double)l / ma->M));
- ma->alpha[k] += x * ma->phi[l];
- }
- }
- for (l = 0; l <= ma->M; ++l)
- ma->alpha[ma->M] += ma->phi[l] * pow((double)l / ma->M, ma->M);
- fflush(stdout);
-}
-