Страницы

Страницы

суббота, 6 декабря 2014 г.

arcsin arccos arctg sqrt

arcsin(x)=sqrt((315-55*x^2-sqrt(99225-97650*x^2-2435*x^4))*(78*x^2+900))/(26*x^2+300), где sqrt()- корень квадратный, а ^-знак степени, данная формула в интервале 0<x<1 , даёт ошибку не более 1%, 

arccos(x)=sqrt(84+6*x-6*sqrt(106+118*x+x^2))/3, данная формула в интервале 0<x<1 даёт ошибку менее 0,1% 

arctg(x)=sqrt(6)*sqrt((150+163*x^2)*(315+260*x^2-sqrt(99225+100800*x^2-860*x^4)))/(326*x^2+300), даёт на интервале 0<x<5 , ошибку менее 1%,а на интервале 0<x<2.5 ошибку менее 0,1%

Understanding Digital
Signal Processing
Richard G. Lyons
p. 539

                                                   X = Re + j Im

Q - аргумент комплексного числа Х в радианах, используя апроксимацию в радианах

                          arctg ( Im/Re) = Q = (Im/Re) / [1+0.28125(Im/Re)^2]

Q лежит в пределах от -45 до 45 градусов,  -1 < Im/Re < 1 ( max ошибка 0,26 градуса)



вычисление sqrt алгоритм основаный на итерационной формуле Герона.

Xn+1 = (A/Xn + Xn)*1/2

unsigned int root1(unsigned int a)
{
   unsigned int x;
   x = (a/0x3f + 0x3f)>>1;
   x = (a/x + x)>>1;
   x = (a/x + x)>>1;
   return(x);
}

еще один алгоритм

unsigned int isqrt(unsigned int x)
{
   unsigned int m, y, b;
   m = 0x4000;
   y = 0;
   while (m != 0){
      b = y | m;
      y = y >> 1;
      if (x >= b) {
         x = x - b;
         y = y | m;
      }
      m = m >> 2;
   }
   return y;
}

Комментариев нет:

Отправить комментарий