Ejemplo n.º 1
0
        public static double TruncateToPowerOfTwo(double d)
        {
            DoubleBits db = new DoubleBits(d);

            db.ZeroLowerBits(52);

            return(db.GetDouble());
        }
Ejemplo n.º 2
0
        private void ComputeKey(int level, Envelope itemEnv)
        {
            double quadSize = DoubleBits.PowerOf2(level);

            pt.X = Math.Floor(itemEnv.MinX / quadSize) * quadSize;
            pt.Y = Math.Floor(itemEnv.MinY / quadSize) * quadSize;
            env.Initialize(pt.X, pt.X + quadSize, pt.Y, pt.Y + quadSize);
        }
Ejemplo n.º 3
0
        public static int ComputeQuadLevel(Envelope env)
        {
            double dx    = env.Width;
            double dy    = env.Height;
            double dMax  = dx > dy ? dx : dy;
            int    level = DoubleBits.Exponent(dMax) + 1;

            return(level);
        }
Ejemplo n.º 4
0
        /// <summary> This computes the number of common most-significant bits in the mantissa.
        /// It does not count the hidden bit, which is always 1.
        /// It does not determine whether the numbers have the same exponent - if they do
        /// not, the value computed by this function is meaningless.
        /// </summary>
        /// <param name="">db
        /// </param>
        /// <returns> the number of common most-significant mantissa bits
        /// </returns>
        public int NumCommonMantissaBits(DoubleBits db)
        {
            for (int i = 0; i < 52; i++)
            {
//				int bitIndex = i + 12;
                if (GetBit(i) != db.GetBit(i))
                {
                    return(i);
                }
            }
            return(52);
        }
Ejemplo n.º 5
0
        /// <summary> Computes whether the interval [min, max] is effectively zero width.
        /// I.e. the width of the interval is so much less than the
        /// location of the interval that the midpoint of the interval cannot be
        /// represented precisely.
        /// </summary>
        public static bool IsZeroWidth(double min, double max)
        {
            double width = max - min;

            if (width == 0.0)
            {
                return(true);
            }

            double maxAbs         = Math.Max(Math.Abs(min), Math.Abs(max));
            double scaledInterval = width / maxAbs;
            int    level          = DoubleBits.Exponent(scaledInterval);

            return(level <= MinBinaryExponent);
        }
Ejemplo n.º 6
0
        public static double MaximumCommonMantissa(double d1, double d2)
        {
            if (d1 == 0.0 || d2 == 0.0)
            {
                return(0.0);
            }

            DoubleBits db1 = new DoubleBits(d1);
            DoubleBits db2 = new DoubleBits(d2);

            if (db1.GetExponent() != db2.GetExponent())
            {
                return(0.0);
            }

            int maxCommon = db1.NumCommonMantissaBits(db2);

            db1.ZeroLowerBits(64 - (12 + maxCommon));
            return(db1.GetDouble());
        }
Ejemplo n.º 7
0
        public static string ToBinaryString(double d)
        {
            DoubleBits db = new DoubleBits(d);

            return(db.ToString());
        }
Ejemplo n.º 8
0
        public static int Exponent(double d)
        {
            DoubleBits db = new DoubleBits(d);

            return(db.GetExponent());
        }