Нахождение обратной функции, которая преобразует 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')
Другие вопросы по тегам