2015-03-17 3 views
1

Эта линияЧто не так с этой кодовой линией?

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

Почему вы говорите, что они такие же, когда они ** явно ** не являются? –

+2

Два предоставленных вами фрагмента кода не являются эквивалентными. В первом случае вы добавляете 'cal_array [вариация]' к результату 'normalize (...)', но во второй сумме 'cal_array [изменение]' передается как часть угла в 'normalize (. ..) '. –

+0

Я должен был нормализовать все это и внести исправления, но это не меняет тот факт, что первая строка возвращает 14, а вторая версия возвращает 225. Нормализация ничего не делает ни в одном из приведенных случаев. –

ответ

2

Попробуйте

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

Проверка C Operator Precedence особенно + против ?:.

+0

Вот и все. Благодаря!!! –

Смежные вопросы