嘿,互联网。我在C中遇到了一个非常奇怪的问题。我正在推导一个浮点值,然后检查它是否大于0。然而,比较总是求值为真,即使值小于零。代码如下:

if (sVel > 0.0f)
{
    sVel += 1.0f;
    sVel -= 1.0f;
    NSLog(@"SEP VEL: %1.6f", sVel);
    return;
}

因此,将sVel设置为100将按预期打印日志并命中return语句;cool。但是,将sVel设置为-100不会打印日志,仍然会命中return语句。我完全糊涂了,我不知道从哪里开始追踪这个。。。

最佳答案

看起来您正在使用调试器跟踪代码。大多数编译器可能会优化代码并执行相同的返回语句。然后会出现这样的情况:不管sVel的初始值是多少,都会跳转到返回代码。
但真正的证据是打印声明。由于没有打印日志,这意味着sVel的计算是正确的。尝试将日志放在if块之外,并查看它何时显示。

08-19 13:27