if语句为false时执行语句

时间:2012-07-08 16:31:39

标签: c++

我正在修补一个项目问题,我遇到了以下非常奇怪的行为。我不能为我的生活弄清楚最新情况。

Screenshot

截图显示。条件计算结果为false,if-statment执行就像是真的一样。

我觉得我在这里疯了。

更新了代码:http://ideone.com/L7KMu

编辑:条件之前的next.x和next.y的实际值 0.324583,9.97891

在if语句之后没有变化。

2 个答案:

答案 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之间。这种舍入将取决于所使用的编译器。