Вложенный логический оператор && допустим? - PullRequest
0 голосов
/ 05 июня 2011

Я написал функцию .oct для использования в Octave, которая не дает ожидаемого результата, и я думаю, что проблема может заключаться в приведенном ниже фрагменте кода - можно ли вложить логический оператор &&, как я это сделалили его нужно отделить, используя дополнительные внутренние циклы if?

 if ((( final_side_PDF > final_uwr_PDF && final_side_PDF > final_unr_PDF ) && final_side_PDF > final_dwr_PDF ) && final_side_PDF > final_dnr_PDF)
    {
    market_model(ii) = 0.0;
    }
 else if ((( final_uwr_PDF > final_side_PDF && final_uwr_PDF > final_unr_PDF ) && final_uwr_PDF > final_dwr_PDF ) && final_uwr_PDF > final_dnr_PDF )
    {
    market_model(ii) = 1.0;
    }
 else if ((( final_unr_PDF > final_side_PDF && final_unr_PDF > final_uwr_PDF ) && final_unr_PDF > final_dwr_PDF ) && final_unr_PDF > final_dnr_PDF)
    {
    market_model(ii) = 2.0;
    }
 else if ((( final_dwr_PDF > final_side_PDF && final_dwr_PDF > final_uwr_PDF ) && final_dwr_PDF > final_unr_PDF ) && final_dwr_PDF > final_dnr_PDF)
    {
    market_model(ii) = -1.0;
    }
 else if ((( final_dnr_PDF > final_side_PDF && final_dnr_PDF > final_uwr_PDF ) && final_dnr_PDF > final_unr_PDF ) && final_dnr_PDF > final_dwr_PDF)
    {
    market_model(ii) = -2.0;
    }
 else
    {
    market_model(ii) = market_model(ii-1);
    }

Изменить в ответ на комментарии

Я хочу проверить, какая из пяти переменных;final_side_PDF, final_uwr_PDF, final_unr_PDF, final_dwr_PDF и final_dnr_PDF;имеет наибольшее значение и возвращает уникальный идентификационный номер;0,1,2, -1, -2;в зависимости от того, какой из них является макс.Приведенный выше код содержится в главном цикле (ii).

1 Ответ

2 голосов
/ 05 июня 2011

Предложение:

 typedef int final_t;

 // From your code I assume that "final_xx" can have the same values, otherwise a std::map would be simpler. 
 std::multimap<final_t, double> finals;

 finals.insert(std::make_pair(final_side_PDF, 0.0));
 finals.insert(std::make_pair(final_uwr_PDF,  1.0));
 finals.insert(std::make_pair(final_unr_PDF,  2.0));
 finals.insert(std::make_pair(final_dwr_PDF, -1.0));
 finals.insert(std::make_pair(final_dnr_PDF, -2.0));

 auto max_final = finals.rbegin();

 if(finals.count(max_final->first) == 1)
    masket_model(ii) = max_final->second;
 else
    market_model(ii) = market_model(ii-1);

Если у "final_xx" есть уникальные значения, вы можете сделать его еще проще:

 typedef int final_t;

 std::map<final_t, double> finals;

 finals[final_side_PDF] =  0.0;
 finals[final_uwr_PDF]  =  1.0;
 finals[final_unr_PDF]  =  2.0;
 finals[final_dwr_PDF]  = -1.0;
 finals[final_dnr_PDF]  = -2.0;

 auto max_final = finals.rbegin();

 market_model(ii) = max_final->second;
...