#include <iostream>
using namespace std;
const double pi=3.1415926;
//double pow(double x,int y);//求x的y次幂
double mysin(double x);
double myabs(double x);
int main( )
{
cout<<"sin(π/2)的值为"<<mysin(pi/2)<<endl;
cout<<"sin(56°)的值为"<<mysin(56)<<endl;
return 0;
}
/*double pow(double x,int y)//求x的y次幂
{
int num=1;
if(x==0)
return 0;
if(y==0)
return 1;
else
{
if(x&&y)
for(int i=0;i<y;i++)
{
num=num*x;
}
}
return num;
}
//下面定义mysin函数,求sin值
double mysin(double x)
{
int num=1;
double sin=0,j,sum=0;
int i,n;
for(n=0;;n++)
{
i=pow((-1),n);
j=pow(x,2*n+1);
num=num*(2*n+1);//代表分母位置的阶乘
sin=(double)(i*j)/(double)num;
if((double)j/(double)num<0.00001)
break;
sum+=sin;
// cout<<i<<endl;
// cout<<"j:"<<j<<endl;
cout<<sum<<endl; //观察值是否正确
}
return sum;
}*/
double mysin(double x)
{
double sum=x,x_pow=x,item;
int n=1,sign=1,fact=1;
for(n=1;;)
{
x_pow*=x*x;
fact*=(n+1)*(n+2);
sign=-sign;
item=x_pow/fact*sign;
n+=2;
sum+=item;
if(myabs(item)<1e-6)
break;
}
return sum;
}
double myabs(double x)
{
return ((x>0)?x:(-x));
}
昨天用自己想的方式来写,很久之后还是不了了之,没写出来,我的程序最后总是得出结果为零,然后想到应该是数据类型的不统一,造成了数据的遗漏,改了很多遍还是不出来,今天还是这样,最终还是得看参考,才慢慢的把它弄明白,这里参考了别人的程序,对比自己错误的放到一起,也能让自己清晰的看见自己的不足,还能查漏补缺。
求sin的泰勒展开式
最新推荐文章于 2023-04-05 22:34:58 发布