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>不为零,现在我想,大概是什么地方出了问题。
:)