嘿,互联网。我在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块之外,并查看它何时显示。