Python структура для преобразования int в IEEE float - PullRequest
1 голос
/ 28 мая 2020

Я реализовал две лямбда-функции, используя struct

int_to_float = lambda n: struct.unpack('@f', struct.pack('@I', n))[0]
float_to_int = lambda f: struct.unpack('@I', struct.pack('@f', f))[0]

Затем я тестирую:

f1 = 1.90826472023605
i = float_to_int(f1)
f2 = int_to_float(i)
print(f1, f2, i)
print(f1-f2)

Результаты печати:

1.90826472023605   1.9082647562026978   1072972293
-3.596664766014612e-08

Означает ли это struct есть проблема с упаковкой / распаковкой?

1 Ответ

1 голос
/ 28 мая 2020

Вы не используете достаточно битов для сохранения исходного значения, которое является 64-битным double. Вместо этого используйте типы d и Q.

def int_to_float(n):
    return struct.unpack('@d', struct.pack('@Q', n))[0]

def float_to_int(f):
    return struct.unpack('@Q', struct.pack('@d', f))[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...