C++用泰勒公式求sinx值有问题

来源:百度知道 编辑:UC知道 时间:2024/05/22 03:41:40
#include<iostream>
#include<cmath>
using namespace std;
const double PI=3.141592653;
int main()
{

double x,fsin=0;
long jecheng(int n);
int l,xiangshu=1,t=1,i=1,m=1;
cin>>x>>l;
cout<<"sin"<<x<<"=";
x=x*PI/180;
while(xiangshu<=l)
{
fsin=fsin+t*pow(x,m)/jecheng(i);
i=i+2;
t=-t;
m=m+2;
xiangshu++;
}
cout<<fsin<<endl;
return 0;
}

long jecheng(int n)
{
long f=1;
int j;
if(n==0||n==1)
return 1;
else
{
{for(j=1;j<=n;j++)
f=f*j;}
return(f);
}
}

当我输入x=90,l=20时运行结果是-1.#IND,这是为什么?怎么解决?
我实在检查不出来,麻烦讲讲具体些!

我知道了,你的阶乘太大了,明显超出LONG的范围

输入小点,比如90 15

把数据类型换一下,换成long double

#include<iostream>
#include<cmath>
using namespace std;
const double PI=3.141592653;
int main()
{

long double x,fsin=0;
long double jecheng(int n);
int l,xiangshu=1,t=1,i=1,m=1;
cin>>x>>l;
cout<<"sin"<<x<<"=";
x=x*PI/180;
while(xiangshu<=l)
{
fsin=fsin+t*pow(x,m)/jecheng(i);
i=i+2;
t=-t;
m=m+2;
xiangshu++;
}
cout<<fsin<<endl;
return 0;
}

long double jecheng(int n)
{
long double f=1;
int j;
if(n==0||n==1)
return 1;
else
{
{
for(j=1;j<=n;j++)
f=f*j;
}
return(f);
}
}