class Aws::Cbor::Decoder

def read_half

precision - 10 bits
exponent - 5 bits
sign - 1 bit
format:
Support decoding only
16 bit IEEE 754 half-precision floats
def read_half
  read_info
  b16 = take(2).unpack1('n')
  exp = (b16 >> 10) & 0x1f
  mant = b16 & 0x3ff
  val =
    case exp
    when 0
      Math.ldexp(mant, -24)
    when 31
      mant.zero? ? Float::INFINITY : Float::NAN
    else
      # exp bias is 15, but to use ldexp we divide by 1024 (2^10) to get
      # exp-15-10
      Math.ldexp(1024 + mant, exp - 25)
    end
  if (b16[15]).zero?
    val
  else
    -val
  end
end