public static double CDF(double location, double scale, double skew, double p, double x)
        {
            if (!IsValidParameterSet(location, scale, skew, p))
            {
                throw new ArgumentException(Resources.InvalidDistributionParameters);
            }

            scale = AdjustScale(scale, skew, p);
            x     = AdjustX(x, scale, skew, p) - location;

            var flip = x < 0;

            if (flip)
            {
                skew = -skew;
                x    = -x;
            }

            var res = (1.0 - skew) / 2.0 + (1.0 + skew) / 2.0 * Gamma.CDF(1.0 / p, 1.0, Math.Pow(x / (scale * (1.0 + skew)), p));

            return(flip ? 1.0 - res : res);
        }