C++ sinx的泰勒展开式

2025-03-10 08:57:58
推荐回答(2个)
回答1:

#include
#include 
using namespace std;
#define PI 3.1415926535898
void main() {
double sum = 0, M = 1, x, a, n = 100;
int i, k, j = 1;
cout << "x=";
cin >> a;
x = a / 180 * PI;
for (i = 0; i <= n; i++) {
M = 1; // 初始化 M = 1
for (k = 1; k <= 2 * i + 1; k++) {
M *= k;
}
sum = pow(x, 2 * i + 1) / M*j + sum;
j = -j;
}
cout << "sin" << a << "=" << sum;
}

回答2:

如下:
#include
#include

/*计算n的阶乘*/
int factor(int n)
{
if(n==1)
return 1;
else
return factor(n-1)*n;
}
/*得到分子的值*/
double get_numerator(double x,int order)
{
return pow(x,order); //求x^order
}
/*得到分母的值*/
double get_denominator(int n)
{
return factor(n); //求n的阶乘
}
/*获得第n项的符号,即(-1)^n*/
int get_symbol(int n)
{
if(n%2 ==0) //n是偶数
return 1;
else
return -1;
}
int main()
{
int i;
double x;
double sin_x=0;
double tmp=0;
printf("please input the x:\n");
scanf("%lf",&x);

for(i=0;;i++)
{
tmp=sin_x; //暂时保存上一步得到的sin值
sin_x += get_numerator(x,2*i+1)/get_denominator(2*i+1)*get_symbol(i);
if(fabs(sin_x-tmp)<1E-6) //精度满足要求
break;
}
printf("sin(%lf)=%lf\n",x,sin_x);
return 0;
}