Как переводить дробное число в двоичной системе счисления (мантисса)?

bn = "101101.101"
ip, fp = bn.split(".")
d = int(ip, 2)
f = sum(int(digit) * (2 ** -(index + 1)) for index, digit in enumerate(fp))
num = d + f
print(num)

как можно упростить этот код для перевода дробной части


Ответы (1 шт):

Автор решения: MBo

Цикл не нужен

f = int(fp, 2) / 2**len(fp)

Кроме того, если дробная часть сама по себе отдельно не нужна, то можно запомнить позицию точки, удалить её, перевести всё целиком один раз в число и разделить на степень двойки. Проще это выглядит или нет - ХЗ... (Проверку на наличие точки не делал)

bn = "101101.01101"
po = bn.index(".")
bn1 = bn[:po] + bn[po+1:]
num = int(bn1, 2) / 2**(len(bn1)-po)
print(num)
→ Ссылка