private void ComputeKey(int level, Envelope itemEnv) { double quadSize = DoubleBits.PowerOf2(level); //double quadSize = pow2.power(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); }
/// <summary> /// Computes the exponent for the largest power of two /// less than the absolute value of the argument. /// In other words, finds the value n such that /// 2ˆn <= abs(num) < 2ˆ(n+1) /// </summary> /// <param name="num"></param> /// <returns>The exponent.</returns> public static int Exponent(double num) { num = Math.Abs(num); double log = Math.Log(num); double log2 = log / LOG_2; int exp = (int)Math.Floor(log2); int exp2 = DoubleBits.Exponent(num); if (exp != exp2) { //System.out.println(DoubleBits.toBinaryString(num)); //System.out.println(num + " pow2 mismatch: " + exp + " DoubleBits: " + exp2); double pow2exp = DoubleBits.PowerOf2(exp); double pow2exp2 = DoubleBits.PowerOf2(exp2); //System.out.println(pow2exp + " pow2exp2 = " + pow2exp2); } return(exp); }