Skip to content

Instantly share code, notes, and snippets.

@TheBlackPlague
Last active September 24, 2021 20:44
Show Gist options
  • Save TheBlackPlague/5bf12408780ae23b51ca198ee8b674ce to your computer and use it in GitHub Desktop.
Save TheBlackPlague/5bf12408780ae23b51ca198ee8b674ce to your computer and use it in GitHub Desktop.
def b_to_int(b):
b_l = len(b)
x = 0;
i = 0
while i < b_l:
x += int(b[i]) * 2 ** (b_l - i - 1)
i = i + 1
return x
# e != 0: n = 1, e == 0: n = 0
# (-1)^s * 2^(e - (2^(e_n - 1) - 1)) * (n + (m / 2^m_b))
def ieee_754_conversion(b_s, b_e, b_m):
s = b_to_int(b_s)
e = b_to_int(b_e)
m = b_to_int(b_m)
e_bit_count = len(b_e)
m_bit_count = len(b_m)
n = 1
if e == 0:
n = 0
sign = ((-1) ** s)
exponent = get_exponent_factor(e, e_bit_count)
mantisa = get_mantisa_normalized(n, m, m_bit_count)
x = sign * exponent * mantisa
return x, sign, exponent, mantisa
def get_exponent_factor(e, bit_count):
bias = (2 ** (bit_count - 1)) - 1
return 2 ** (e - bias)
def get_mantisa_normalized(n, m, bit_count):
return n + (m / (2 ** bit_count))
def half_prec(binary):
b_s = binary[0:1]
b_e = binary[1:6]
b_m = binary[6:16]
return ieee_754_conversion(b_s, b_e, b_m)
def float_prec(binary):
b_s = binary[0:1]
b_e = binary[1:9]
b_m = binary[9:32]
return ieee_754_conversion(b_s, b_e, b_m)
def double_prec(binary):
b_s = binary[0:1]
b_e = binary[1:12]
b_m = binary[12:64]
return ieee_754_conversion(b_s, b_e, b_m)
bin_table = ['0100000010100100', '01000000111010101110000101001000', '0100000000100111101111110010110011011110100001010101101111110101']
for binary in bin_table:
print('----- CONVERTING -----')
if len(binary) == 16:
result = half_prec(binary)
if len(binary) == 32:
result = float_prec(binary)
if len(binary) == 64:
result = double_prec(binary)
sign_interpretation = '+'
if result[1] < 0:
sign_interpretation = '-'
print('Binary: ' + binary + ', number of bits: ' + str(len(binary)))
print('Sign: interpreted as: ' + sign_interpretation)
print('Exponent generated factor: ' + str(result[2]))
print('Normalized mantissa: ' + str(result[3]))
print('Complete conversion: ' + str(result[0]))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment