是不是精度的问题,大佬们看看

八月大哥 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;


}
...全文
1569 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
八月大哥 2018-05-26
  • 打赏
  • 举报
回复
不知道问题出在哪里??
八月大哥 2018-05-26
  • 打赏
  • 举报
回复
对啊,就是没有输出才有问题请教你们
yshuise 2018-05-26
  • 打赏
  • 举报
回复
double要初始化,如doubel k = 0.0
wxf54318 2018-05-26
  • 打赏
  • 举报
回复
程序有问题,我用的VS2015没有输出, double x; double k; 没指定初值,另外double s=1;应改为double s=1.0;比较好
八月大哥 2018-05-26
  • 打赏
  • 举报
回复
早上有人吗???
幻夢之葉 2018-05-26
  • 打赏
  • 举报
回复
1:k需要初始化 2:算法问题pow(-1,n),-1的n次方,相邻的n求出的是一正一负,基本上很难让它们相差低于0.00001。你这程序死循环也是个证明
八月大哥 2018-05-25
  • 打赏
  • 举报
回复
大佬们都睡觉了吗
八月大哥 2018-05-25
  • 打赏
  • 举报
回复
作者是新手小白,求大佬们给予小小的帮助,运行一下,

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧