public static double InvCDF(double location, double scale, double skew, double p, double pr) { if (!IsValidParameterSet(location, scale, skew, p)) { throw new ArgumentException(Resources.InvalidDistributionParameters); } scale = AdjustScale(scale, skew, p); var flip = pr < (1.0 - skew) / 2.0; var lambda = skew; if (flip) { pr = 1.0 - pr; lambda = -lambda; } var res = scale * (1.0 + lambda) * Math.Pow(Gamma.InvCDF(1.0 / p, 1.0, 2 * pr / (1.0 + lambda) + (lambda - 1.0) / (lambda + 1.0)), 1.0 / p); if (flip) { res = -res; } res += location; return(res - AdjustAddend(scale, skew, p)); }