public static final long div(long topFlong, long bottomFlong)
			throws FixedPointLongException {
		int shift = OFFSET;
		if (bottomFlong == 0)
			throw new FixedPointLongException("Divide by zero");
		if (topFlong == 0)
			return 0;
		while (shift > 0 && (topFlong & (1L << LENGTH - 1)) == 0) {
			shift--;
			topFlong <<= 1;
		}
		while (shift > 0 && (bottomFlong & 1L) == 0) {
			shift--;
			bottomFlong = (bottomFlong >> 1) + (bottomFlong & 1L);
		}
		return (topFlong / bottomFlong) << shift;
	}