Esempio n. 1
0
static inline uint32_t ex4_sym2prob(double sym) {
//    sym -= .5;
    const long double fac = TOTALPROB - EX4_MAX_VALUE;
#ifdef EX4_HISTOS
    double cd = 0;
    for(int i = EX4_MIN; i < sym; i++)
        cd+=ex4_histo[i];
//    return (ld)TOTALPROB * cd / ex4_histo_sum;
    return EX4_MIN_PROB*(sym-EX4_MIN) + fac * cd / ex4_histo_sum;
#elif !defined(EX4_GG)
    ld g =  (1-EX4_BOX_MIX)*cdf(sym/gdevs[curBlock]);
    if (sym >= -EX4_BOX_RADIUS) {
        if (sym > EX4_BOX_RADIUS) g+=EX4_BOX_MIX;
        else g += EX4_BOX_BONUS*(sym+EX4_BOX_RADIUS);
    }
    return EX4_MIN_PROB*(sym-EX4_MIN) + fac * g;
#else
    double alpha = alphas[curBlock], beta = betas[curBlock];
    ld g = cdf(sym/EX4_GAUSS_VAR);
    double gg = gcdf(sym/alpha, beta);
//    printf("gg %Lf %Lf %f\n", sym/alpha, beta, gg);
//    assert(gg>=0);
//    printf("diff %f\n", sym-mid);
    double r = EX4_GAUSS_RATIO;
    return EX4_MIN_PROB*(sym-EX4_MIN) + fac * (r*g + (1-r)*gg);
#endif
}
Esempio n. 2
0
static int lcmf2(int a, int b)
{ 
    return a * b / gcdf(a,b);
} 
Esempio n. 3
0
/* vx と vy の最大公約数を返す(vx >= vy) */
int gcdf(int vx, int vy)
{
  return (vy == 0)? vx: gcdf(vy, vx % vy);
}
Esempio n. 4
0
static int gcdf(int a, int b)
{ 
    if (b==0) return a;
    return gcdf(b, a % b);
} 
Esempio n. 5
0
/* va と vb の最大公約数を求める */
int gcd(int va, int vb)
{
  return (va > vb)? gcdf(va, vb): gcdf(vb, va);
}