аватар question@mail.ru · 01.01.1970 03:00

Как представить float в виде integer без потери информации?

Есть задача преобразования float значений в значения типа int (одно float значение в одно int значение) без потери информации, т.е., чтобы потом можно было выполнить обратное преобразование. Как это можно реализовать?

Важно

Надо, чтобы при таком преобразовании сохранялся порядок и сумма,
т.е. для любых a, b: float должно выполняться:

to_float(to_int(a) + to_int(b)) == a + bto_int(a) < to_int(b) при a < b и т.д.

Нашёл на англоязычном SO , где побитово представляется структура float значений, но не представляю, как её можно применить для своей задачи.

Примечание: NaN и inf в моей задаче преобразовывать не надо.


Попытки решения

Изначально на ум пришла сериализация с помощью pickle.dumps, а затем получение int из этих байт, но это совсем не рациональное решение и оно совершенно не удовлетворяет требованиям.

Были попытки реализовать это через байтовые представления чисел (), в таком варианте не сохраняется сумма.

аватар answer@mail.ru · 01.01.1970 03:00
to_float(to_int(a) + to_int(b)) == a + bto_int(a) < to_int(b) при a < b и т.д.

Я вспомнил, что в питоне int'ы бесконечные. У есть 11 бит на степень, значит при умножении на 2**(2**12) получится целое число, которое можно положить в int. Только умножать надо по мере перевода, а не дробное число - иначе произойдёт переполнение.

Последние

Похожие