[an error occurred while processing this directive]
вернее pi/4
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено fontp 15 июля 2004 г. 12:44
В ответ на: в типичном случае отправлено fontp 15 июля 2004 г. 12:26

вот не поленился и нашёл

#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif

static inline double arctg1 (double x)
//-------------------------------------------
// 2
// arctg(x) = A*x - B*x , if (x >= 0)
//
// 2
// arctg(x) = A*x + B*x , if (x < 0)
//
// error <= 0.004
//-------------------------------------------
{
if (x < 0) {
return x*(1.0597 + 0.27131*x);
}else {
return x*(1.0597 - 0.27131*x);
}
}/*arctan1*/

double arctg2 (double Rs, double Rc)
//-------------------------------------------
// 0 <= arctg2 <= 2*M_PI
//-------------------------------------------
{
double ret = 0.0;
if (Rc > +1.0E-10) {
if (Rs > +Rc) {
ret = (+M_PI/2.0 - arctg1(Rc/Rs));
}else if (Rs < -Rc) {
ret = (+3.0*M_PI/2.0 - arctg1(Rc/Rs));
}else { // |Rs| < |Rc|
if (Rs >= 0.0) {
ret = arctg1(Rs/Rc);
}else { // Rs < 0
ret = 2.0*M_PI + arctg1(Rs/Rc);
}
}
}else if (Rc < -1.0E-10) {
if (Rs < +Rc) { // Rs < 0, |Rs| > |Rc|
ret = (+3.0*M_PI/2.0 - arctg1(Rc/Rs));
}else if (Rs > -Rc) { // Rs > 0, |Rs| > |Rc|
ret = (+M_PI/2.0 - arctg1(Rc/Rs));
}else { // |Rs| < |Rc|
ret = (M_PI + arctg1(Rs/Rc));
}
}else {
if (Rs > 0.0) {
ret = +M_PI/2.0;
}else {
ret = +3.0*M_PI/2.0;
}
}
if (ret < 0.0) {
ret += 2*M_PI;
}else if (ret >= 2*M_PI) {
ret -= 2*M_PI;
}
return ret;
}/*arctg2*/

в коротком разложении понятно не ряд Тэйлора, а чебышевская аппроксимация

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru