求用C++语言编写y=sinx,用泰勒公式

2025-04-14 09:43:17
推荐回答(2个)
回答1:

貌似你的写得很复杂……我最近自己写了个,比较简单,可以参考一下
#include

#include

using
namespace
std;
int
main()
{
double
x;
double
sinx;
int
a
=
1;
//控制正负相间
double
b;
//记录x的分母次方
double
c
=
1.0;
//分母
double
d
=
1.0;
//记录分母的阶乘
double
temp;
//记录泰勒公式每项的值
cin>>x;
sinx
=
x;
//第一项
b
=
x;
//b的初始化
do
{
a
=
-a;
//正负变换
c
+=
2;
//分母加2规律
d
*=
c*(c-1);
//分母阶乘累积
b
*=
x*x;
//分子乘积累积
temp
=
a*b/d;
//计算泰勒公式的某一项
sinx
+=
temp;
//把这项加到总和
}while(fabs(temp)
>
0.000001);
//如果某一项的值还大于这个精度
cout<return
0;
}

回答2:

//
原函数
return
x
的n次方
//
改成
//
return
x的2n+1次方
double
potenz(double
x,unsigned
int
n)
{
double
pot=1.0;
for(unsigned
int
i=1;i<=(2*n+1);i++)
pot
*=x;
return
pot;
}
//
阶乘
(2n+1)!
double
fakult(unsigned
int
n)
{
double
fak=1.0;
for(unsigned
int
i=1;i
<=
(2*n+1);i++)
fak
*=
i;
return
fak;
}
//
决定某项的符号
//
偶数项为正
//
sin(x)
=
x
-
x^3/3!
+
x^5/5!
...
//
其中x单独计算,所以序列为
//
-x^3/3!
+
x^5/5!
...
double
ungerade(unsigned
int
n)
{
if(n%2)
return
(-1.0);
return
(1.0);
}
//求各项和
double
iteration(double
x)
{
//第一项
double
s(x);
unsigned
int
i=1;
while
(fabs(potenz(x,i)/fakult(i))>1e-8)
{
s
+=
(potenz(x,i)
*
ungerade(i)
/
fakult(i)
);
i++;
}
return
s;
}