public static double StudentDistributionInversed(int k, double p) { double z; double rk = k; if (p is > .25 and < .75) { if (Math.Abs(p - .5) < Eps) { return(0); } z = IncompleteBeta.IncompleteBetaInversed(.5, .5 * rk, Math.Abs(1 - 2 * p)); var t = Math.Sqrt(rk * z / (1 - z)); return(p < 0 ? -t : t); } var r_flg = -1; if (p >= .5) { p = 1 - p; r_flg = 1; } z = IncompleteBeta.IncompleteBetaInversed(.5 * rk, .5, 2 * p); return(__MaxRealNumber * z < rk ? r_flg * __MaxRealNumber : r_flg *Math.Sqrt(rk / z - rk)); }