我正在修补一个项目问题,我遇到了以下非常奇怪的行为。我不能为我的生活弄清楚最新情况。
截图显示。条件计算结果为false,if-statment执行就像是真的一样。
我觉得我在这里疯了。
更新了代码:http://ideone.com/L7KMu
编辑:条件之前的next.x和next.y的实际值 0.324583,9.97891
在if语句之后没有变化。
答案 0 :(得分:6)
编译完代码后,看来你调用的abs不是std :: abs,浮点数重载,而是整数abs。尝试修改代码:
// get the root not relating to this point
nextX = (abs(solved.first - next.x) < EPSILON) ? solved.second : solved.first;
nextY = k * nextX + m;
prev = next;
next = point(nextX, nextY);
cout << abs(next.x) << ", " << std::abs(next.x) << endl;
if ( std::abs(next.x) < 0.01){
cout << "Here1" << endl;
if ( next.y > 0){
cout << "Here2" << endl;
foundExit = true;
}
}
您会注意到cout行正在为abs和std :: abs。
打印不同的值答案 1 :(得分:2)
abs(next.x)被评估为0,因为它介于0和1之间。这种舍入将取决于所使用的编译器。