Примеры использования CORDIC с плавающей точкой для быстрого и компактного (по коду) вычисления функций sin, cos, tan, arctan, arcsin, arccos, sinh, cosh, tanh, arctanh, log, exp, квадратного корня , умножения и деления.
Методы разбиты на три части: линейную, круговую и гиперболическую.
Так как линейный метод позволяет реализовать умножение и деление для реализации вычислений достаточно применения сложения/вычитания и функций побитового сдвига, если вычисления проводятся с фиксированной точкой.
Ссылки по теме:
На Си:
Проверено лично, 16 бит версия:
+ переписан под atan2:
___________________
void cordicAtan(int16_t *theta, int16_t xx, int16_t yy, int16_t n){ int16_t k, d, tx, ty, tz; int16_t x=xx,y=yy,z=0; n = (n>CORDIC_NTAB) ? CORDIC_NTAB : n; for (k=0; k<n; ++k) { d = y>=0 ? 0 : -1; tx = x + (((y>>k) ^ d) - d); ty = y - (((x>>k) ^ d) - d); tz = z + ((cordic_ctab[k] ^ d) - d); x = tx; y = ty; z = tz; } *theta= z;}
___________________
На Си++, плавающая точка:
Нa ASM:
Для PIC18F, фиксированная точка:
Для?
