⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 commonbits.cpp

📁 一个很好的vc底层代码
💻 CPP
字号:
/********************************************************************** * $Id: CommonBits.cpp,v 1.2 2004/07/02 13:28:29 strk Exp $ * * GEOS - Geometry Engine Open Source * http://geos.refractions.net * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation.  * See the COPYING file for more information. * ********************************************************************** * $Log: CommonBits.cpp,v $ * Revision 1.2  2004/07/02 13:28:29  strk * Fixed all #include lines to reflect headers layout change. * Added client application build tips in README. * * Revision 1.1  2004/04/10 22:41:25  ybychkov * "precision" upgraded to JTS 1.4 * * **********************************************************************/#include <geos/precision.h>namespace geos {/*** Computes the bit pattern for the sign and exponent of a* double-precision number.* @param num* @return the bit pattern for the sign and exponent*/int64 CommonBits::signExpBits(int64 num){	return num >> 52;}/*** This computes the number of common most-significant bits in the mantissas* of two double-precision numbers.* 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.* @param db* @return the number of common most-significant mantissa bits*/int CommonBits::numCommonMostSigMantissaBits(int64 num1, int64 num2) {	int count = 0;	for (int i = 52; i >= 0; i--){		if (getBit(num1, i) != getBit(num2, i))			return count;		count++;	}	return 52;}/*** Zeroes the lower n bits of a bitstring.* @param bits the bitstring to alter* @param i the number of bits to zero* @return the zeroed bitstring*/int64 CommonBits::zeroLowerBits(int64 bits, int nBits){	int64 invMask = (1<< nBits)-1;	int64 mask = ~ invMask;	int64 zeroed = bits & mask;	return zeroed;}/*** Extracts the i'th bit of a bitstring.* @param bits the bitstring to extract from* @param i the bit to extract* @return the value of the extracted bit*/int CommonBits::getBit(int64 bits, int i){	int64 mask = (1 << i);	return (bits & mask) != 0 ? 1 : 0;}CommonBits::CommonBits() {	isFirst = true;	commonMantissaBitsCount = 53;	commonBits = 0;}void CommonBits::add(double num) {	int64 numBits=(int64)num;	if (isFirst) {		commonBits = numBits;		commonSignExp = signExpBits(commonBits);		isFirst = false;		return;	}	int64 numSignExp = signExpBits(numBits);	if (numSignExp != commonSignExp) {		commonBits = 0;		return;	}	//    System.out.println(toString(commonBits));	//    System.out.println(toString(numBits));	commonMantissaBitsCount = numCommonMostSigMantissaBits(commonBits, numBits);	commonBits = zeroLowerBits(commonBits, 64 - (12 + commonMantissaBitsCount));	//    System.out.println(toString(commonBits));}double CommonBits::getCommon(){	return (double)commonBits;}///**//* A representation of the Double bits formatted for easy readability//*///String toString(int64 bits)//{//double x = Double.int64BitsToDouble(bits);//String numStr = int64.toBinaryString(bits);//String padStr = "0000000000000000000000000000000000000000000000000000000000000000" + numStr;//String bitStr = padStr.substring(padStr.length() - 64);//String str = bitStr.substring(0, 1) + "  "//+ bitStr.substring(1, 12) + "(exp) "//+ bitStr.substring(12)//+ " [ " + x + " ]";//return str;//}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -