请帮我找出为什么我处于无限循环中?

时间:2011-04-21 22:57:05

标签: 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(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;
}

3 个答案:

答案 0 :(得分:2)

我看到多个独占关系 <<>

我希望其中至少有一个 包容性>=<=

这是一个很好的一般经验法则(可能会出现异常,例如比较值的中间增量......所以你需要保持清醒,这是第一个经验法则)

答案 1 :(得分:1)

我建议把一些printfs放在跟踪你的位置。

答案 2 :(得分:0)

编译程序,提供-g开关进行调试,并按gdb运行。这样你就会知道你的do-while条件错误地成为了什么值。