public double decodeHostFloat(long encoding) {

		if (size == 8) { // assume IEEE-754 8-byte format which matches Java double encoding
			return Double.longBitsToDouble(encoding);
		}

		if (size > 8) {
			throw new UnsupportedOperationException(
				"method not supported for float size of " + size);
		}

		boolean sgn = extractSign(encoding);
		int exp = extractExponentCode(encoding);
		long frac = extractFractionalCode(encoding);

		boolean subnormal = false;
		if (exp == 0) {
			if (frac == 0) { // Floating point zero
				return sgn ? -0.0 : +0.0;
			}
			subnormal = true;
		}
		else if (exp == maxexponent) {
			if (frac == 0) { // Floating point infinity
				return sgn ? Double.NEGATIVE_INFINITY : Double.POSITIVE_INFINITY;
			}
			return Double.NaN;
		}

		exp -= bias;

		long msbit = 1 << (frac_size - 1); // most-significant fractional/mantissa bit

		if (!subnormal && !jbitimplied) {
			frac &= ~msbit; // remove explicit jbit
			frac <<= 1;
			--exp;
		}

		if (subnormal) {
			// attempt to normalize
			exp = -bias;

			while (exp > -1023 && (frac & msbit) == 0 && frac != 0) {
				frac <<= 1;
				--exp;
			}

			// establish implied jbit
			if (exp > -1023 && (frac & msbit) != 0 && frac != 0) {
				frac <<= 1;
			}
			else {
				--exp;
			}

			// mask-off implied jbit
			frac &= ~-(1 << frac_size);
		}

		exp += 1023;
		frac <<= 52 - frac_size;

		long encodedDouble = (sgn ? (1L << 63) : 0) | ((long) exp << 52) | frac;
		return Double.longBitsToDouble(encodedDouble);
	}
Decode {@code encoding} to a SmallFloatData using this format.

NB: this method should not be used if {@link #size}>8

@param encoding the encoding
@return the decoded value as a SmallFloatData
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/floatformat/FloatFormat.java