示例#1
0
        public static double GetMidpoint(double lower, double upper)
        {
            double midpoint;

            if (double.IsNegativeInfinity(lower))
            {
                if (double.IsPositiveInfinity(upper))
                {
                    midpoint = 0.0;
                }
                else if (upper > 0)
                {
                    midpoint = -upper;
                }
                else if (upper < 0)
                {
                    midpoint = 2 * upper;
                }
                else
                {
                    midpoint = -1;
                }
            }
            else if (double.IsPositiveInfinity(upper))
            {
                if (lower > 0)
                {
                    midpoint = 2 * lower;
                }
                else if (lower < 0)
                {
                    midpoint = -lower;
                }
                else
                {
                    midpoint = 1;
                }
            }
            else
            {
                midpoint = MMath.Average(lower, upper);
            }
            return(midpoint);
        }
示例#2
0
        private static double RepresentationMidpoint(double lower, double upper)
        {
            if (lower == 0)
            {
                if (upper < 0)
                {
                    return(-RepresentationMidpoint(-lower, -upper));
                }
                else if (upper == 0)
                {
                    return(lower);
                }
                // fall through
            }
            else if (lower < 0)
            {
                if (upper <= 0)
                {
                    return(-RepresentationMidpoint(-lower, -upper));
                }
                else
                {
                    return(0); // upper > 0
                }
            }
            else if (upper < 0)
            {
                return(0);                // lower > 0
            }
            // must have lower >= 0, upper >= 0
            long lowerBits = BitConverter.DoubleToInt64Bits(lower);
            long upperBits = BitConverter.DoubleToInt64Bits(upper);
            long midpoint  = MMath.Average(lowerBits, upperBits);

            return(BitConverter.Int64BitsToDouble(midpoint));
        }