C++ 请帮我找出为什么我处于无限循环中?
这是一种二等分根法C++ 请帮我找出为什么我处于无限循环中?,c++,infinite-loop,C++,Infinite Loop,这是一种二等分根法 double p1::root(double (*pf)(double k), int a, int b, double e) { // void nrerror(char error_text[]); double left = (double)a; double right = (double)b; double midpoint; do { midpoint = ((right+left)/2); if(pf(le
double p1::root(double (*pf)(double k), int a, int b, double e) {
// void nrerror(char error_text[]);
double left = (double)a;
double right = (double)b;
double midpoint;
do
{
midpoint = ((right+left)/2);
if(pf(left) *pf(midpoint) <0){
right = midpoint;
}
else if(pf(right) * pf(midpoint) <0){
left = midpoint;
}
else{
break;
}
}while(abs(right-left) >2*e && abs(left-right)>e);
return midpoint;
}
双p1::根(双(*pf)(双k),整数a,整数b,双e){
//无效nError(字符错误_text[]);
左双=(双)a;
右双=(双)b;
双中点;
做
{
中点=((右+左)/2);
if(pf(左)*pf(中点)e);
返回中点;
}
我建议将一些printf放入一个程序中,对您所在的位置进行一些跟踪。我看到多个排他关系
=
或编译程序,给出一个-g
开关进行调试并运行它。这样,当条件错误变为真时,您将知道的值是什么 pf
、a
、b
和e
的值是什么?虽然这不是你的问题,但是你的While比较有点多余-只使用abs(右-左)>2*e,你会传递一个无限循环的pf
函数吗?你能把代码发布到pf()吗
当您使用无限循环时,您正在使用?abs(右-左)>2*e&&abs(左-右)E是有点多余的。为什么不在你在它的时候跟踪调试器1,跟踪你在哪里。-0.5在C++回答中建议“代码> Prtff<代码>。为良好的因果报应<代码>:)/代码>第一个两个代码< >代码>的意义是有意义的,只要代码> E < /C>不为零,现在我想,大概是什么地方出了问题。:)