class FloatFormat {

	public double getHostFloat(long encoding) {
		boolean sgn = extractSign(encoding);
		long frac = extractFractionalCode(encoding);
		int exp = extractExponentCode(encoding);
		boolean normal = true;
		if (exp == 0) {
			if (frac == 0) { // Floating point zero
				// FIXME: add on sign-bit for +0 or -0 allowed by standard
				return sgn ? -0.0 : +0.0;
			}
			// Number is denormalized
			normal = false;
		}
		else if (exp == maxexponent) {
			if (frac == 0) { // Floating point infinity
				// FIXME: add on sign-bit for +inf or -inf allowed by standard
				return sgn ? Double.NEGATIVE_INFINITY : Double.POSITIVE_INFINITY;
			}
			// encoding is "Not a Number" NaN
			return Double.NaN;
		}

		// Get "true" exponent and fractional
		exp -= bias;
		if (normal && jbitimplied) {
			frac >>>= 1; // Make room for 1 jbit
			frac |= 0x8000000000000000L; // set bit in at top of normalized frac
		}
		return createFloat(sgn, frac, exp);
	}

	  FloatFormat(int sz);

}