Логика в этой функции для «обрезки, но одного начального нуля» полностью неверна и удаляет значащие цифры из результата.
Правильное представление значения равно или иззначения, указанные в вашем вопросе;это:
0011111111110000000000000000000000000000000000000000000000000001
, который можно получить, заменив последнюю строку этой функции на:
return s
или используя более простую реализацию:
def float_to_bin(f):
[d] = struct.unpack(">Q", struct.pack(">d", f))
return '{:064b}'.format(d)
Начальные и конечные нули в значениях с плавающей запятой имеют большое значение и не могут быть удалены без изменения значения.