예제 #1
0
        private MetaFloat ReadFloat(XmlNode node)
        {
            var floatValue = new MetaFloat();

            floatValue.Value = float.Parse(node.Attributes["value"].Value);
            return(floatValue);
        }
예제 #2
0
        public static MetaFloat Mean(this IList <MetaNum> self, bool skipNaN = true)
        {
            if (self.Count == 0)
            {
                return(MetaFloat.NaN);
            }

            MetaFloat mean        = (MetaFloat)0.0;
            int       actualCount = self.Count;

            foreach (var value in self)
            {
                MetaFloat v = (MetaFloat)value;
                if (MetaFloat.IsNaN(v))
                {
                    if (skipNaN)
                    {
                        --actualCount;
                        continue;
                    }
                    else
                    {
                        return(MetaFloat.NaN);
                    }
                }

                mean += v;
            }

            return(mean / actualCount);
        }
예제 #3
0
        public static MetaFloat Covariance(this IList <MetaNum> self, IList <MetaNum> other, bool unbiased = true, bool skipNaN = true)
        {
            if (self.Count != other.Count)
            {
                return(MetaFloat.NaN);
            }

            var mean0 = self.Mean(skipNaN);
            var mean1 = other.Mean(skipNaN);

            if (MetaFloat.IsNaN(mean0) || MetaFloat.IsNaN(mean1))
            {
                return(MetaFloat.NaN);
            }

            int actualCount = self.Count;

            MetaFloat c = (MetaFloat)0.0;

            for (int i = 0; i < self.Count; ++i)
            {
                if (TypeTrait <MetaNum> .IsNaN(self[i]) || TypeTrait <MetaNum> .IsNaN(other[i]))
                {
                    if (skipNaN)
                    {
                        --actualCount;
                        continue;
                    }
                    else
                    {
                        return(MetaFloat.NaN);
                    }
                }
                var a = (MetaFloat)self[i] - mean0;
                var b = (MetaFloat)other[i] - mean1;
                c += a * b;
            }

            if (unbiased)
            {
                return(c / (actualCount - 1));
            }
            else
            {
                return(c / actualCount);
            }
        }
예제 #4
0
        public static MetaFloat Variance(this IList <MetaNum> self, bool unbiased = true, bool skipNaN = true)
        {
            if (self.Count == 0)
            {
                return(MetaFloat.NaN);
            }

            MetaFloat mean = Mean(self, skipNaN);

            if (MetaFloat.IsNaN(mean))
            {
                return(MetaFloat.NaN);
            }

            MetaFloat variance    = (MetaFloat)0.0;
            int       actualCount = self.Count;

            foreach (var value in self)
            {
                MetaFloat v = (MetaFloat)value;
                if (TypeTrait <MetaFloat> .IsNaN(v))
                {
                    if (skipNaN)
                    {
                        --actualCount;
                        continue;
                    }
                    else
                    {
                        return(MetaFloat.NaN);
                    }
                }

                MetaFloat x = v - mean;
                variance += x * x;
            }

            if (unbiased)
            {
                return(variance / (actualCount - 1));
            }
            else
            {
                return(variance / actualCount);
            }
        }
 public void AssertFloat(MetaFloat expectedFloat, MetaFloat actualFloat)
 {
     Assert.AreEqual(expectedFloat.Value, actualFloat.Value);
 }
예제 #6
0
        private void WriteFloatContent(XmlTextWriter writer, MetaFloat floatValue)
        {
            var s1 = string.Format(CultureInfo.InvariantCulture, "{0:0.0###########}", floatValue.Value);

            writer.WriteAttributeString("value", s1);
        }
예제 #7
0
 public static bool IsNaN(MetaFloat value)
 {
     return(true);
 }