ARTICLE AD BOX
I am having a conceptual issue trying to understand IEEE-754 mantissa.
I used the following code to extract the mantissa from a float.
#where v is a float import struct import math packed_bytes=struct.pact(.d',v) unpacked_int=struct.unpack('>Q',packed_bytes)[0] mantissa_int = unpacked_int & 0xFFFFFFFFFFFFF mantissa_want = str(bin(mantissa_int))[2:]However when I process this in a value like v=-738593.45 I get
110100010100100001011100110011001100110011001100110
If I use the code below to perform the mathematical conversion from base 10 to base 2, I get a different value
v=-738593.45 v_hex=v.hex() if v_hex[0] =="-": s_sign="-" else: s_sign="+" #print("s_sign="+s_sign) # Split the number into integer and fractional parts integer_part = int(v) #print("integer_part="+str(integer_part)) fractional_part = abs(v - integer_part) #converting the integer into a binary if s_sign=="-": binary_integer=bin(integer_part)[3:] if s_sign=="+": binary_integer=bin(integer_part)[2:] if abs(v)<1: #print("cond1 true") binary_integer="0" #print("binary_integer="+binary_integer) #converting the fraction part into binary binary_fraction="" for i in range(53): fractional_part*=2 if fractional_part >=1: binary_fraction+="1" fractional_part-=1 else: binary_fraction+='0' if fractional_part==0: break binary_comb=binary_integer+"."+binary_fraction print(binary_comb)10110100010100100001.01110011001100110011001100110011
Should these numbers be the same? Even ignoring the decimal location they are not the same.
value extracted by packing bytes: 110100010100100001011100110011001100110011001100110
mathematical value: 10110100010100100001.01110011001100110011001100110011
