方程求根二分法编程程序问题

德赛法 2017-09-25 10:19:13
题目为:用二分法求f(x)=e^x+10*x-2=0在[0,1]内的实根,要求误差不超过1/2*10^(-2)。
我的代码如下:
#include<iostream>
#include<math.h>

#define e 2.7182818245

int main()
{
using namespace std;

double a=0,b=1,error=0.005;
double y0,y1,x;
int count=0;


do
{
x=(a+b)/2;
y0=pow(e,a)+10*a-2;
y1=pow(e,x)+10*x-2;
if(y0*y1>0)
a=x;
else
b=x;
count++;
}while((b-a)<error);
cout<<"x="<<x<<endl;
cout<<"count="<<count<<endl;
cin.get();
return 0;
}

结果显示

答案明显不对!请问哪里有问题?怎么改?
...全文
703 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
德赛法 2017-09-29
  • 打赏
  • 举报
回复
谨遵教诲
引用
“多一少一”问题占程序员常犯错误的10%以上! 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断,掰手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个? <、<=、==、>、>=中的哪个? 代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
自信男孩 2017-09-26
  • 打赏
  • 举报
回复
引用 2 楼 qq_39524140 的回复:
果然有用。但还有一个问题,输出的count理论上应该是7,因为只需要二分7次就够了,为什么我的运行出来count=8呢?
因为count是后置自增,运行7次后,最后count是8了。
赵4老师 2017-09-26
  • 打赏
  • 举报
回复
“多一少一”问题占程序员常犯错误的10%以上! 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断,掰手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个? <、<=、==、>、>=中的哪个? 代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
德赛法 2017-09-26
  • 打赏
  • 举报
回复
果然有用。但还有一个问题,输出的count理论上应该是7,因为只需要二分7次就够了,为什么我的运行出来count=8呢?
das白 2017-09-25
  • 打赏
  • 举报
回复
while 循环条件 改成大于

65,187

社区成员

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

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