эффективный способ уменьшить 32-битное число до 16-битного числа - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь уменьшить 32-битное значение до 16-битного числа со знаком (uint32_t -> int16_t) или, другими словами, пытаюсь уменьшить мой результат uin32_t до 0 - 32767 (int16_max). Мой код выглядит так. В этом фрагменте мой диапазон ввода составляет от 0 до 90000. Таким образом, ввод 90000 должен соответствовать 32767 и т. Д .:

    uint16_t scaled_estimate = 0;
    uint32_t input = 85000;
    uint32_t max_base = 90000;
    uint16_t new_base = INT16_MAX; // 32767
    uint16_t scaled_estimate = (input * new_base) / max_base;
    if(scaled_estimate > new_base) scaled_estimate = new_base; // clamp

Есть ли лучший способ добиться такого масштабирования на встроенных платформах или я должен доверять компилятору делать правильные вещи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...