Ха-ха. И ни одного грамотного ответа. Даже
Sancho, перемудрил.
Не выспались похоже.
Самый правильный из ответов это предложение от
com. Вычисления будут верными, но зачем же заставлять контроллер с самого начала работать с float. Это тяжелые вычисления.
Вроде бы мудрее поступил
Naladchik, добавив float только при делении, т.к. до этого дробных быть не может. Однако он позабыл про самое первое действие умножения. Там два integer, значит и на выходе первого блока будет integer а это -32768… 32767. Умножив 256 * 255 = 65280. В результате будет ошибка. Нужен long int на любом из входов.
Теперь
Sancho.
Он упростил формулу. Это хорошо. Но почему...
Sancho писал(а): ↑09.02.2022{, 08:38}
Что имеем на выходе при байтах и округлении до байта по 0.5
С-128 и
+1 при D > 127
С + D/256 - 128 = 255 + 255/256 - 128 = 127 (при округлении) почему до +1? Точно не выспался.
А вот это для чего? Я вообще не понял.
Sancho писал(а): ↑09.02.2022{, 08:38}
Что-бы получить указанный Вами диапазон, нужно привести результат к типу char, он же int8_t, а затем, желательно, к integer.
Да и в вопросе топикстартера ошибка:
DrMario писал(а): ↑09.02.2022{, 02:53}
Правильный ответ должен быть от -128 до +128 ...
Исходя из формулы результат не может быть "+128" , максимум 127