有人可以告诉我为什么这段代码是滞后的

时间:2015-02-03 00:22:24

标签: c++

我构建了这个代码来计算每两个等于某个数字的数字组合。程序在增加1时起作用,但当改为0.1时,似乎我只能称之为滞后

#include <iostream>
using namespace std;

int main()
{
  float goala = 0;
  float goalb = 0;
  float inc = 0.1;
  float finalgoal = 1000;
  float x;
  while(goala != finalgoal){
     while(goalb != finalgoal){
       x = goalb * goala;

       if(x == finalgoal){
         cout<< goala << "\t" << goalb << "\t"<< x << endl;
       }

       goalb = goalb + inc;
    }
    goala=goala + inc;
    goalb = 0;
  }
  cout<< "done"<< endl;
  return 0;
}

1 个答案:

答案 0 :(得分:2)

使用增量1(即1.0)有效,因为它具有精确的二进制表示,因此while (goala != finalgoal)while (goalb != finalgoal)检查成功触发循环终止。

使用0.1的增量(没有精确的二进制表示)会得到接近但不完全符合您预期值的值(例如,0.100001)。此行为会导致您的while条件失败并无限循环。

将条件更改为while (goala < finalgoal)while (goalb < finalgoal)将停止无限循环,但不会解决循环内的逻辑。