这个c代码行有什么问题?

时间:2015-03-17 00:13:03

标签: c

这一行

double hdg_and_lee = cal_array[variation] +
                     normalize(corrected.hdg + (corrCalc.twa > 0 && corrCalc.twa < 180)
                     ? -abs(corrected.leeway) : abs(corrected.leeway));

返回cal_array[variation]的值,这显然是不正确的。 corrected.leeway恰好为0但corrected.hdg为211,variation为14,这就是此行评估的内容。

我把它改成了这个,但是我认为它应该与上面的行相同。

double lee = (corrCalc.twa > 0 && corrCalc.twa < 180) ? -abs(corrected.leeway) : abs(corrected.leeway));
double hdg_and_lee;
hdg_and_lee  = cal_array[variation] + corrected.hdg + lee;
hdg_and_lee = normalize(hdg_and_lee);

我无法看清我做错了什么。

这是规范化。它只是使角度在0到360之间;

double normalize(double angle){
    while (angle < 0) angle += 360;
    while (angle > 360) angle -= 360;
    return angle;
}

这让我感到疯狂,但当然我有一个可行的选择。我只是想知道出了什么问题。

1 个答案:

答案 0 :(得分:2)

试试这个

double hdg_and_lee = cal_array[variation] + normalize(corrected.hdg +  ((corrCalc.twa > 0 && corrCalc.twa < 180)? -abs(corrected.leeway) : abs(corrected.leeway)));

检查C运算符优先级,尤其是+?: