2
$\begingroup$

I'm trying to convert a 16 bit precision binary number to decimal format however I am completely failing to do so.

The binary I'm trying to convert is $0101011101010000$ My current method is:

Separation: $0|10101|1101010000$

Sign = 0

Mantissa = $1.1101010000$

Exponent = $21 - (2^4 - 1) = 6 $

Mantissa Denormalised = $1110101.0000$

This gives an answer of 117. Is this actually correct or am I making a mistake in my method?

$\endgroup$
  • $\begingroup$ It seems to be correct ! $\endgroup$ – Xoff Jan 31 '15 at 22:00
  • $\begingroup$ Why do you say "I am completely failing to do so"? $\endgroup$ – TonyK Jan 31 '15 at 22:16
  • $\begingroup$ Ah, I was using this binary example to check whether my method was correct as it was not working for a different number. All that happened was that I failed in moving the decimal point correctly... $\endgroup$ – echoeida Jan 31 '15 at 22:27
3
$\begingroup$

You are right.

You can do that automatically with python and numpy :

import numpy as np
import struct
a=struct.pack("H",int("0101011101010000",2))
np.frombuffer(a, dtype =np.float16)[0]

and you get : 117.0

$\endgroup$
0
$\begingroup$

Your formula produces the correct result 117.0 in this case but it may fail for subnormal numbers, for NaNs, for +/- infinity.

>>> float_from_unsigned16(int("0101011101010000", 2))
117.0

where float_from_unsigned16(n) (in Python):

def float_from_unsigned16(n):
    assert 0 <= n < 2**16
    sign = n >> 15
    exp = (n >> 10) & 0b011111
    fraction = n & (2**10 - 1)
    if exp == 0:
        if fraction == 0:
            return -0.0 if sign else 0.0
        else:
            return (-1)**sign * fraction / 2**10 * 2**(-14)  # subnormal
    elif exp == 0b11111:
        if fraction == 0:
            return float('-inf') if sign else float('inf')
        else:
            return float('nan')
    return (-1)**sign * (1 + fraction / 2**10) * 2**(exp - 15)

See binary16.py

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.