Я использовал следующий код, чтобы извлечь мантиссу из числа с плавающей запятой.
Код: Выделить всё
#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:]
Я получаю
110100010100100001011100110011001100110011001100110
Если я использую приведенный ниже код для выполнения математического преобразования из базы 10 по основанию 2, я получаю другое значение
Код: Выделить всё
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:
binary_fraction+="1"
fractional_part-=1
else:
binary_fraction+='0'
if fractional_part==0:
break
binary_comb=binary_integer+"."+binary_fraction
print(binary_comb)
Должны ли эти числа быть одинаковыми? Даже если игнорировать десятичную позицию, они не совпадают.
значение, извлеченное путем упаковки байтов:
110100010100100001011100110011001100110011001100110
математическое значение:
10110100010100100001.01110011001100110011001100110011
Подробнее здесь: https://stackoverflow.com/questions/798 ... -in-python
Мобильная версия