Exemple #1
0
    public static double logBeta(double a, double b)
    {
        double corr, ans;
        double p = JMath.min(a, b);
        double q = JMath.max(a, b);

        if (p <= 0.0)
        {
            ans = double.NaN;
        }
        else if (p >= 10.0)
        {
            corr = r9lgmc(p) + r9lgmc(q) - r9lgmc(p + q);
            double temp = dlnrel(-p / (p + q));
            ans = -0.5 * JMath.log(q) + 0.918938533204672741780329736406 + corr + (p - 0.5) * JMath.log(p / (p + q)) + q * temp;
        }
        else if (q >= 10.0)
        {
            corr = Sfun.r9lgmc(q) - r9lgmc(p + q);
            ans  = logGamma(p) + corr + p - p * JMath.log(p + q) + (q - 0.5) * dlnrel(-p / (p + q));
        }
        else
        {
            ans = JMath.log(gamma(p) * (gamma(q) / gamma(p + q)));
        }
        return(ans);
    }
Exemple #2
0
    private static double dlnrel(double x)
    {
        double ans;

        if (x <= -1.0)
        {
            ans = double.NaN;
        }
        else if (JMath.abs(x) <= 0.375)
        {
            ans = x * (1.0 - x * Sfun.csevl(x / .375, ALNRCS_COEF));
        }
        else
        {
            ans = JMath.log(1.0 + x);
        }
        return(ans);
    }
Exemple #3
0
 internal override Symbolic PreEval(Symbolic x)
 {
     return(new Complex(Sfun.logGamma(x.ToComplex().Re)));
 }
Exemple #4
0
 internal override Zahl f(Zahl x)
 {
     return(new Unexakt(Sfun.logGamma(x.unexakt().real)));
 }