Приближение квадратного корня из суммы двух квадратов на микроконтроллере

Я работаю над реализацией алгоритма БПФ в сборке на 8-битном микроконтроллере ( HCS08) для удовольствия. Как только алгоритм будет завершен, у меня будет массив 8-битных реальных / мнимых пар, и я хочу найти величину каждого из этих значений. То есть, если x является сложным, я хочу найти

|x| = sqrt(Re{x}^2 + Im{x}^2)  

. Теперь у меня есть 16-битный регистр и 8-битный регистр. Я думал просто возвести их в квадрат, сложить их и извлечь квадратный корень из результата, но это создает проблему: максимально возможное значение суммы квадратов двух 8-битных чисел составляет ~ 130k, что больше, чем максимальное значение, которое может содержать 16-битный регистр (65,5 КБ).

Я придумал подпрограмму, которая вычисляет целочисленный квадратный корень из 16-битного числа, что, кажется, работает хорошо, но, очевидно, я не могу гарантировать, что буду работать со значениями, которые уместятся в 16 битах. Сейчас я думаю, что есть алгоритм, который приблизит то, что мне нужно напрямую, но я не могу ничего найти. Любые идеи очень приветствуются.

Подводя итог: скажем, у меня есть вектор с двумя 8-битными компонентами, и я хочу найти длину вектора. Как я могу приблизительно это вычислить, не вычисляя квадраты и квадратные корни?

Спасибо!

5
задан user599599 3 April 2011 в 06:37
поделиться