Я хочу умножить целое число без знака 5432 на 0,01, а затем добавить / вычесть 0,3. Вместо использования чисел с плавающей точкой я хочу использовать арифметику с фиксированной точкой. Вот мои шаги:
1) ((1 << 16) * 0,01) = 655 => Фиксированная точка Q0.16
2) 655 * 5432 = 3557960 => Фиксированная точка Q16.16
3) ((1 << 16) * 0,3) = 19660 => Фиксированная точка Q0.16
4) Добавить 0.3: 3557960 + 19660 = 3577620 => Преобразовать в число с плавающей точкой = 54.59, что очень похоже на использование плавающих вычислений: 5432 * 0.01 + 0.3 = 54.62
5) Вычтите 0,3: найдите дополнение двух 19660 => 45876, теперь 3577620 + 45876 = 3623496 => 55,29, что не соответствует ожидаемому 5432 * 0,01 - 0,3 = 54,02
Может ли кто-нибудь подтвердить, что я прав в пункте 1-4 и чего мне не хватает в пункте 5?