
	//---------------------------------------------------
	//开根号算法 逐比特确认法
	//一个32位整数求根，结果应该是一个16位整数。求这个16位整数，其实质是确认每位的比特是0还是1.
	//我们把这个根分为两个相加的部分，一部分是已确认的值，另一部分是未确认的值。
	//从高位到低位，每次迭代确认一位。初始时，已确认部分为0。则问题的初始形式为：
	
	// (n0 + r15)^2 <= a
	// s.t.       n0 = 0
	
	//逐比特确认法把问题分解为相同的子问题的集合，采用递推的方法，
	//很好地利用了前面步骤的结果，不用什么都从头算起，从而避免了重复劳动，
	//用加减法和移位操作代替了乘除法操作，最终获得了性能上的增益。
	//算法发明者为：James Ulery  论文:Computing Integer Square Roots
	
	uint32 bitwise_verification( uint32 x )
	{
		uint32 temp = 0;
		uint8 v_bit = 15;
		uint16 n = 0;
		uint16 b = 0x8000;
		
		if( x <= 1 ) {
			return x;
		}
		do {
			uint32 t = (n << 1) + b;
			temp = t << v_bit;
			v_bit - 1;
			if( x >= temp ) {
				n + b;
				x - temp;
			}
			b >> 1;
		}
		while( b != 0 );
		return n;
	}

