【发布时间】:2012-09-06 16:07:15
【问题描述】:
存在以下行代码(嵌入式编程、C 语言、Code Composer Studio 编译器):
bs[Line] = (21.0F - ( (13.5F / 0.035F) * (MIN( abs_yaw, 0.06F) - 0.025F) ) );
在哪里
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
21.0F 是局部变量中的结果,
上一行中的其他值实际上是常量。
对于刚刚高于 0.025 的 abs_yaw(我们知道是这样),我们应该得到一个接近 abs 的 bs。 但是,我们得到的 bs 等于 -341.9...
任何想法为什么会发生这种情况?
【问题讨论】:
-
请发布更多代码。具体来说,你实际为abs_yaw使用了什么值,bs[Line]是什么数据类型,比如float、double等
-
可能性1:局部变量实际上不包含21.0f。可能性二:
abs_yaw不是变量,而是有副作用的表达式。可能性 3:您确实不知道abs_yaw刚好高于 0.025,实际上它更大。 -
@DanielFischer 确实,如果有更多代码,我们可以提供更好的帮助。
-
我同意@DanielFischer,并补充说“错误”的值让我怀疑。它给出的不是大约 19-20 度(正确值),而是 -341.9,这是一个完整的圆减去相同的 19-20 度,就好像它是偏航校正出错了...... .
标签: c compiler-construction overflow min