/*利用下列公式求反正弦函数近似值。
arcsin(x)=x+pow(x,3)/(2*3)+1*3*pow(x,5)/(2*4*5)+...., 其中 |x|<1
其中通项公式为: (2n)!*pow(x,2n+1)/(pow(2,2n)*pow(n!,2)*(2n+1))
结束条件可用|u|< 1.0e-7,其中u为通项。
样例:
0.77
0.878841*/
#include<stdio.h>
#include<math.h>
int jc(int n)
{
int a=1;
while(n>=1)
{
a=a*n;
n--;
}
return a;
}
double tx(double x,int n)
{
double a;
a=jc(2*n)*pow(x,2*n+1)/(pow(2,2*n)*pow(jc(n),2)*(2*n+1));
return a;
}
int main()
{
double x,a=0;
int i;
scanf("%lf",&x);
for(i=0;;i++)
{
if(fabs(tx(x,i))<1.0e-7)
break;
a=a+tx(x,i);
}
printf("%lf\n",a);
printf("%lf\n",asin(x));
return 0;
}
arcsin(x)=x+pow(x,3)/(2*3)+1*3*pow(x,5)/(2*4*5)+...., 其中 |x|<1
其中通项公式为: (2n)!*pow(x,2n+1)/(pow(2,2n)*pow(n!,2)*(2n+1))
结束条件可用|u|< 1.0e-7,其中u为通项。
样例:
0.77
0.878841*/
#include<stdio.h>
#include<math.h>
int jc(int n)
{
int a=1;
while(n>=1)
{
a=a*n;
n--;
}
return a;
}
double tx(double x,int n)
{
double a;
a=jc(2*n)*pow(x,2*n+1)/(pow(2,2*n)*pow(jc(n),2)*(2*n+1));
return a;
}
int main()
{
double x,a=0;
int i;
scanf("%lf",&x);
for(i=0;;i++)
{
if(fabs(tx(x,i))<1.0e-7)
break;
a=a+tx(x,i);
}
printf("%lf\n",a);
printf("%lf\n",asin(x));
return 0;
}