Основанное на CORDIC приближение синуса и косинуса
[y, x]
= cordicsincos(theta,niters)
[ вычисляет синус и косинус y, x]
= cordicsincos(theta,niters)theta с помощью приближения алгоритма CORDIC. y содержит аппроксимированный результат синуса, и x содержит аппроксимированный результат косинуса.
|
|
|
|
|
Основанный на CORDIC аппроксимированный синус |
|
Основанный на CORDIC аппроксимированный косинус |
Следующий пример иллюстрирует эффект количества итераций на результате приближения cordicsincos.
wrdLn = 8;
theta = fi(pi/2, 1, wrdLn);
fprintf('\n\nNITERS\t\tY (SIN)\t ERROR\t LSBs\t\tX (COS)\t ERROR\t LSBs\n');
fprintf('------\t\t-------\t ------\t ----\t\t-------\t ------\t ----\n');
for niters = 1:(wrdLn - 1)
[y, x] = cordicsincos(theta, niters);
y_FL = y.FractionLength;
y_dbl = double(y);
x_dbl = double(x);
y_err = abs(y_dbl - sin(double(theta)));
x_err = abs(x_dbl - cos(double(theta)));
fprintf(' %d\t\t%1.4f\t %1.4f\t %1.1f\t\t%1.4f\t %1.4f\t %1.1f\n', ...
niters, y_dbl,y_err, (y_err * pow2(y_FL)), x_dbl,x_err, ...
(x_err * pow2(y_FL)));
end
fprintf('\n');
|
Выходная таблица появляется можно следующим образом:
NITERS Y (SIN) ERROR LSBs X (COS) ERROR LSBs ------ ------- ------ ---- ------- ------ ---- 1 0.7031 0.2968 19.0 0.7031 0.7105 45.5 2 0.9375 0.0625 4.0 0.3125 0.3198 20.5 3 0.9844 0.0156 1.0 0.0938 0.1011 6.5 4 0.9844 0.0156 1.0 -0.0156 0.0083 0.5 5 1.0000 0.0000 0.0 0.0312 0.0386 2.5 6 1.0000 0.0000 0.0 0.0000 0.0073 0.5 7 1.0000 0.0000 0.0 0.0156 0.0230 1.5
[1] Volder, JE. “Тригонометрический Вычислительный Метод CORDIC”. Транзакции IRE на Электронно-вычислительных машинах. Издание EC-8, сентябрь 1959, стр 330–334.
[2] Andraka, R. “Обзор алгоритма CORDIC для основанных на FPGA компьютеров”. Продолжения 1998 шестых международных симпозиумов ACM/SIGDA по Программируемым пользователем вентильным матрицам. 22-24 февраля 1998, стр 191–200.
[3] Вальтер, J.S. “Объединенный Алгоритм для Элементарных функций”. Hewlett-Packard Company, Пало-Альто. Компьютерная Конференция по Соединению Spring, 1971, стр 379–386. (из набора Компьютерного Исторического музея). www.computer.org/csdl/proceedings/afips/1971/5077/00/50770379.pdf
[4] Schelin, Чарльз В. “Приближение функций калькулятора”. Американская Mathematical Monthly. Издание 90, № 5, май 1983, стр 317–325.