Рейтинг:  0 / 5

Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

Примеры использования CORDIC с плавающей точкой для быстрого и компактного (по коду) вычисления функций sin, cos, tan, arctan, arcsin, arccos, sinh, cosh, tanh, arctanh, log, exp, квадратного корня , умножения и деления. 
Методы разбиты на три части: линейную, круговую и гиперболическую. 
http://www.voidware.com/cordic.htm
Так как линейный метод позволяет реализовать умножение и деление для реализации вычислений достаточно применения сложения/вычитания и функций побитового сдвига, если вычисления проводятся с фиксированной точкой.

Ссылки по теме:
На Си:
http://www.chiefdelphi.com/media/papers/1575

Проверено лично, 16 бит версия:

http://www.dcs.gla.ac.uk/~jhw/cordic/

+ переписан под 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;
}

___________________

На Си++, плавающая точка:

http://people.sc.fsu.edu/~jburkardt/cpp_src/cordic/cordic.html

Нa ASM:

Для PIC18F, фиксированная точка: http://www.picbasic.co.uk/forum/showthread.php?t=10528

http://www.chiefdelphi.com/media/papers/2016

 

Для? http://control.cx/uCforth/cordic_trig.html