Как представить float в виде integer без потери информации?
📁 python, помощь, ии
Есть задача преобразования 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 из этих байт, но это совсем не рациональное решение и оно совершенно не удовлетворяет требованиям.
Были попытки реализовать это через байтовые представления чисел (), в таком варианте не сохраняется сумма.
to_float(to_int(a) + to_int(b)) == a + bto_int(a) < to_int(b) при a < b и т.д.
Я вспомнил, что в питоне int'ы бесконечные. У есть 11 бит на степень, значит при умножении на 2**(2**12) получится целое число, которое можно положить в int. Только умножать надо по мере перевода, а не дробное число - иначе произойдёт переполнение.
Войдите чтобы оставить ответ