Я ищу алгоритм для умножения и деления чисел с фиксированной точкой 15.16.
У меня уже есть сложение и вычитание. Это было легко — простое 32-битное сложение и вычитание. С умножением и делением я также могу добавить множество тригонометрических и экспоненциальных/логарифмических функций. И я думаю, что могу справиться с простым умножением, так как в моей библиотеке есть обратная функция, и я могу использовать ее для реализации деления: a * (1/b) = a / b
. Но 32-битное умножение не работает, так как оно игнорирует точку счисления.
Я работаю над 16-битным микроконтроллером, поэтому я хотел бы избежать чего-то большего, чем 32-битное умножение, которое занимает около 4 тактов на моем процессоре. Хотя это не критично, я просто пытаюсь заменить математику с плавающей запятой.
Я слышал, что мне нужно сдвинуть или повернуть результат, но я не уверен, как это поможет или, в частности, как его сместить. Любые предложения или помощь приветствуются!