コード例 #1
0
        private static double?AGM(IList <double> set, GeometricMeanVariant variant, int iterationsNo)
        {
            if (iterationsNo < 0)
            {
                return(null);
            }

            double         previousAM = Arithmetic(set).Value;
            double         previousGM = Geometric(set, variant).Value;
            double         nextAM     = default(double);
            double         nextGM     = default(double);
            IList <double> currentSet;

            for (int i = 1; i < iterationsNo; i++)
            {
                currentSet = new List <double>()
                {
                    previousAM, previousGM
                };
                nextAM     = Arithmetic(currentSet).Value;
                nextGM     = Geometric(currentSet, variant).Value;
                previousAM = nextAM;
                previousGM = nextGM;
            }

            string result = Strings.GetCommon(nextAM, nextGM);

            if (string.IsNullOrEmpty(result) || result.Equals("-"))
            {
                return((nextAM + nextGM) / 2.0);
            }

            return(Convert.ToDouble(result, CultureInfo.InvariantCulture));
        }
コード例 #2
0
ファイル: Averages.cs プロジェクト: vego1mar/PI
        public static double?AGM(IList <double> set, GeometricMeanVariant variant)
        {
            if (set == null || set.Count == 0)
            {
                return(null);
            }

            return(AGM(set, variant, set.Count));
        }
コード例 #3
0
ファイル: Averages.cs プロジェクト: vego1mar/PI
        public static double?Heronian(IList <double> set, GeometricMeanVariant variant)
        {
            if (set == null || set.Count == 0)
            {
                return(null);
            }

            double weightedAM = (Convert.ToDouble(set.Count) / (set.Count + 1)) * Arithmetic(set).Value;
            double weightedGM = Geometric(set, variant).Value / (set.Count + 1);

            return(weightedAM + weightedGM);
        }
コード例 #4
0
ファイル: Averages.cs プロジェクト: vego1mar/PI
        public static IList <double> Heronian(IList <IList <double> > orderedSet, GeometricMeanVariant variant)
        {
            if (orderedSet == null || orderedSet.Count == 0)
            {
                return(new List <double>().AsReadOnly());
            }

            IList <double> heronians = new List <double>();

            for (int x = 0; x < orderedSet.Count; x++)
            {
                heronians.Add(Heronian(orderedSet[x], variant).Value);
            }

            return(heronians);
        }
コード例 #5
0
ファイル: Averages.cs プロジェクト: vego1mar/PI
        public static IList <double> AGM(IList <IList <double> > orderedSet, GeometricMeanVariant variant)
        {
            if (orderedSet == null || orderedSet.Count == 0)
            {
                return(new List <double>().AsReadOnly());
            }

            IList <double> agms = new List <double>();

            for (int x = 0; x < orderedSet.Count; x++)
            {
                agms.Add(AGM(orderedSet[x], variant).Value);
            }

            return(agms);
        }
コード例 #6
0
ファイル: Averages.cs プロジェクト: vego1mar/PI
        public static double?Geometric(IList <double> set, GeometricMeanVariant variant)
        {
            if (set == null || set.Count == 0)
            {
                return(null);
            }

            switch (variant)
            {
            case GeometricMeanVariant.Sign:
                return(GeometricMeanOfSign(set));

            case GeometricMeanVariant.Parity:
                return(GeometricMeanOfParity(set));

            case GeometricMeanVariant.Absolute:
                return(GeometricMeanOfAbsolute(set));

            case GeometricMeanVariant.Offset:
                return(GeometricMeanOfOffset(set));
            }

            return(null);
        }