嘿互联网。我在 C 中遇到了一个非常奇怪的问题。我正在导出一个浮点值,然后检查它是否大于 0。但是,即使该值小于零,比较始终评估为真。这是代码:
if (sVel > 0.0f)
{
sVel += 1.0f;
sVel -= 1.0f;
NSLog(@"SEP VEL: %1.6f", sVel);
return;
}
因此,将 sVel 设置为 100 会按预期打印日志并命中 return 语句;凉爽的。但是,将 sVel 设置为 -100 不会不打印日志并且仍然命中返回语句。我非常困惑,我不确定从哪里开始追踪这个……
最佳答案
看起来您正在使用调试器跟踪代码。大多数编译器可能会优化代码并执行相同的返回语句。这样看来,无论 sVel 的初始值如何,您都将跳转到返回代码。
真正的证据是打印语句。由于未打印日志,这意味着 sVel 已正确评估。尝试将日志放在 if block 之外,看看它何时显示。
关于c - 浮点值评估完全不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3498173/