Перейти к содержанию
    

нужно расчитать arccos. Есть оптимизированая библиотека qmath в ней можно расчитать atan.

arccos(x) = pi/2 - arctg(x/sqrt(1-x*x)) ;

Для перещета arccos слишком много операций нет ли готовой оптимизированой ф-и arccos или хотябы коэфиц. полинома.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

для atan у них вот такой полином, для acos чтобы был такойже

 

;***********************************************************************;

;* Tylor Series Approximation of ATAN: *;

;* Algorithm : *;

;* atan(x): where 'x' is in 16.16 format *;

;* = 0.318253*x + 0.003314*x^2 - 0.130908*x^3 + 0.068542*x^4 *;

;* - 0.009159*x^5; if x<1 *;

;* = 0.5-atan(1/x); if x>=1 *;

;***********************************************************************;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

нужно расчитать arccos. Есть оптимизированая библиотека qmath в ней можно расчитать atan.

arccos(x) = pi/2 - arctg(x/sqrt(1-x*x)) ;

Для перещета arccos слишком много операций нет ли готовой оптимизированой ф-и arccos или хотябы коэфиц. полинома.

 

если арифметика целочисленная, то CORDIC, наверное, будет оптимальным вариантом. однако придется вычислить синус.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Надо быстрая функция

Арифметика целочисленная. А CORDIC используют та что я видел для ПЛИС а как тут я не знаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для точности ~10-5 (что соответствует Q15) подойдет такой метод:

 

 

acos(x) ~ f(x) = sqrt( 1 - x ) * P( x ) x=0 ... 1 f(x) = pi/2 ... 0

 

P( x ) = -0.0187293*x^3 + 0.0742610*x^2 - 0.2121144*x + 1.5707288

 

Делить тут уже не надо, но корень извлечь придется.

Все остальные способы существенно сложнее в вычислительном плане...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

P( x ) = -0.0187293*x^3 + 0.0742610*x^2 - 0.2121144*x + 1.5707288

 

Делить тут уже не надо, но корень извлечь придется.

 

И не забыть, что вычислять полином лучше по схеме Горнера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

DMax:

И не забыть, что вычислять полином лучше по схеме Горнера.

 

Ну, для настоящих индейцев это само-собой разумеется...

 

_Andu_:

А как получились эти коэффициенты

 

Путем аппроксимации функции acos(x)/sqrt(1-x).

В отличие от acos эта функция хорошо приближается полиномом невысокого порядка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...