是不是精度的问题,大佬们看看
八月大哥 2018-05-25 11:02:32 样例输入
5.1 0.00001
样例输出
11 0.3779776
输入的x为5.1,精度值e为0.00001。当n为9时,利用上述公式计算cos(x)的值为0.3779226,n为10时计算的结果为0.3779809,两结果之差的绝对值约为0.000058,大于要求的精度值0.00001,故需要继续迭代计算。当n为11时计算的结果为0.3779776,与n为10的计算结果之差的绝对值约为0.000003,小于要求的精度值,所以最小迭代次数应为11,最后一次计算的cos(x)的值为0.3779776(小数点后保留7位有效数字)。
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int factorial(int );
int main()
{
int n=0;
double x;
double e;
double s=1;
double k;
cin>>x>>e;
while(true)
{
n++;
s=s+pow(-1,n)*pow(x,2*n)/factorial(2*n);
if(n>=2 && fabs(s-k)<e)
{
cout<<n<<" "<<fixed<<setprecision(7)<<s<<endl;
break;
}
k=s;
}
return 0;
}
int factorial(int a)
{
int s=1;
for(int i=1;i<=a;i++)
s*=i;
return s;
}