我构建了这个代码来计算每两个等于某个数字的数字组合。程序在增加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;
}
答案 0 :(得分:2)
使用增量1(即1.0)有效,因为它具有精确的二进制表示,因此while (goala != finalgoal)
和while (goalb != finalgoal)
检查成功触发循环终止。
使用0.1的增量(没有精确的二进制表示)会得到接近但不完全符合您预期值的值(例如,0.100001)。此行为会导致您的while条件失败并无限循环。
将条件更改为while (goala < finalgoal)
和while (goalb < finalgoal)
将停止无限循环,但不会解决循环内的逻辑。