Нахождение обратной функции, которая преобразует 16-битное целое число без знака в двойное
У меня есть функция, которая принимает 16-разрядное целое число без знака и преобразует его в двойное число. Данные поступают от датчика температуры ( MCP9808), и функция преобразует его в градусы Цельсия.
Функция определяется следующим образом:
double convert_tempc(uint16_t data) {
double temp = data & 0x0FFF;
temp /= 16.0;
if (data & 0x1000) temp -= 256;
return temp;
}
У меня вопрос, как я могу выполнить обратную серию операций?
Мне нужна функция, чтобы найти 16-битное значение, полученное этим датчиком, которое дает заданную температуру в градусах Цельсия.
Поскольку 16-разрядное значение может представлять только конечное число значений, я полагаю, что обратной функции нужно будет найти ближайший двойник, который можно представить, а затем выполнить обратное преобразование.
Есть ли простой способ сделать это?
Функция написана на C, но я буду реализовывать ее на Python.
1 ответ
Вот некоторый код, который проверяет формулу, предложенную в комментариях.
def u16_to_float(data):
temp = data & 0x0FFF
temp /= 16.0
if data & 0x1000:
temp -= 256
return temp
def float_to_u16(temp):
return int(temp * 16) & 0x1FFF
# test
for data in range(0x2000):
temp = u16_to_float(data)
u = float_to_u16(temp)
assert u == data, (data, temp, u)
print('Ok')