public static double[] decode_exactly (String geohash){
		double[] lat_interval = {-90.0 , 90.0};
		double[] lon_interval = {-180.0, 180.0};
		
		double lat_err =  90.0;
		double lon_err = 180.0;
		boolean is_even = true;
		int sz = geohash.length();
		int bsz = bits.length;
		double latitude, longitude;
		for (int i = 0; i < sz; i++){
			
			int cd = _decodemap.get(geohash.charAt(i));
			
			for (int z = 0; z< bsz; z++){
				int mask = bits[z];
				if (is_even){
					lon_err /= 2;
					if ((cd & mask) != 0){
						lon_interval[0] = (lon_interval[0]+lon_interval[1])/2;
					} else {
						lon_interval[1] = (lon_interval[0]+lon_interval[1])/2;
					}
					
				} else {
					lat_err /=2;
				
					if ( (cd & mask) != 0){
						lat_interval[0] = (lat_interval[0]+lat_interval[1])/2;
					} else {
						lat_interval[1] = (lat_interval[0]+lat_interval[1])/2;
					}
				}
				is_even = is_even ? false : true;
			}
		
		}
		latitude  = (lat_interval[0] + lat_interval[1]) / 2;
		longitude = (lon_interval[0] + lon_interval[1]) / 2;

		return new double []{latitude, longitude, lat_err, lon_err};
	}