private bool EqualsCoordinates(double point1XorY, double point2XorY)
        {
            double p1 = point1XorY;
            double p2 = point2XorY;

            p1 = ComparerUtils.GetCanonicalValues(p1, precision);
            p2 = ComparerUtils.GetCanonicalValues(p2, precision);

            return(p1 == p2);
        }
        public override int GetHashCode(T observation)
        {
            if (EqualityComparer <T> .Default.Equals(observation, default(T)))
            {
                return(0);
            }

            double x = ComparerUtils.GetCanonicalValues(observation.EstimatedValue, ComparerUtils.comparePrecision);

            return(x.GetHashCode());
        }
        public override int GetHashCode()
        {
            int    hash = 3;
            double x    = X;
            double y    = Y;

            x = ComparerUtils.GetCanonicalValues(x, precision);
            y = ComparerUtils.GetCanonicalValues(y, precision);

            hash = (hash * 7) + x.GetHashCode();
            hash = (hash * 7) + y.GetHashCode();

            return(hash);
        }
        private bool EqualsCoordinatesOfObservations(Coordinates firstObservationCoordinates, Coordinates secondObservationCoordinates)
        {
            double x1 = firstObservationCoordinates.X;
            double y1 = firstObservationCoordinates.Y;

            double x2 = secondObservationCoordinates.X;
            double y2 = secondObservationCoordinates.Y;

            x1 = ComparerUtils.GetCanonicalValues(x1, ComparerUtils.comparePrecision);
            y1 = ComparerUtils.GetCanonicalValues(y1, ComparerUtils.comparePrecision);

            x2 = ComparerUtils.GetCanonicalValues(x2, ComparerUtils.comparePrecision);
            y2 = ComparerUtils.GetCanonicalValues(y2, ComparerUtils.comparePrecision);

            return(x1 == x2 && y1 == y2);
        }
        private bool EqualsCoordinates(Coordinates other)
        {
            double x1 = X;
            double y1 = Y;

            double x2 = other.X;
            double y2 = other.Y;

            x1 = ComparerUtils.GetCanonicalValues(x1, precision);
            y1 = ComparerUtils.GetCanonicalValues(y1, precision);

            x2 = ComparerUtils.GetCanonicalValues(x2, precision);
            y2 = ComparerUtils.GetCanonicalValues(y2, precision);

            return(x1 == x2 && y1 == y2);
        }
        public override bool Equals(T xObservation, T yObservation)
        {
            var baseEqualityCompareResult = DefaulValueEquals(xObservation, yObservation);

            if (baseEqualityCompareResult.HasValue)
            {
                return(baseEqualityCompareResult.Value);
            }

            if (double.IsNaN(xObservation.EstimatedValue))
            {
                return(double.IsNaN(yObservation.EstimatedValue));
            }

            double x = ComparerUtils.GetCanonicalValues(xObservation.EstimatedValue, ComparerUtils.comparePrecision);
            double y = ComparerUtils.GetCanonicalValues(yObservation.EstimatedValue, ComparerUtils.comparePrecision);

            return(x == y);
        }
        public override int GetHashCode(T observation)
        {
            if (EqualityComparer <T> .Default.Equals(observation, default(T)))
            {
                return(0);
            }

            int    hash = 3;
            double x    = observation.ObservationPoint.X;
            double y    = observation.ObservationPoint.Y;

            x = ComparerUtils.GetCanonicalValues(x, ComparerUtils.comparePrecision);
            y = ComparerUtils.GetCanonicalValues(y, ComparerUtils.comparePrecision);


            hash = (hash * 7) + x.GetHashCode();
            hash = (hash * 7) + y.GetHashCode();

            return(hash);
        }
 private bool EqualsCoordinatesOfObservations(double point1XorY, double point2XorY)
 {
     return(ComparerUtils.GetCanonicalValues(point1XorY, ComparerUtils.comparePrecision)
            == ComparerUtils.GetCanonicalValues(point2XorY, ComparerUtils.comparePrecision));
 }