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));
        }