Оптимизация «водопадного» исчисления С ++ - PullRequest
0 голосов
/ 21 сентября 2018

Я работаю над этим кодом C ++:

double robCalculation::calcsomePoad(double freq, double t, double w, 
double b, double L, double a, double d, double p, double xbol, double 
n, double m, double sigma, double intval, bool RungeVal)
{
auto c0 = 299792458;
auto mue_r =  1.000023;
auto lambda = c0/freq;
dcomp v0(1.0,0.0);
auto z0 = 120*M_PI;
dcomp Z0(z0,0.0);
dcomp j(0.0,1.0);
auto we = w - ((5*t*(1+log(4*M_PI*w/t))) / (4 *M_PI));
auto kc = we / b;
auto temp = pow((1-kc*kc),0.25);
auto temp2 = (2+2*temp) / (1-temp);
auto temp3 =  1/log(temp2);
auto Z0s = 120*M_PI*M_PI * temp3;
auto k0 = 2.0*M_PI / lambda;
dcomp ZL=dcomp(1.0,1.0)*pow(((M_PI*freq*mue_r)/sigma),0.5);
auto l=L;
auto temp4=(a-L)/2;
auto xmin=temp4;
auto xmax=temp4+l;
double temp6 = 0;
.
.
.
}

, поскольку вы можете видеть, что исчисление зависит от переменной в предыдущей строке.

Мой вопрос заключается в следующем: есть ликакой-нибудь алгоритм, API, методику вы можете посоветовать мне оптимизировать этот код и сделать исчисление меньше в "водопаде"?

1 Ответ

0 голосов
/ 21 сентября 2018

Нет, этот вид «водопада» присущ вам алгоритму, а точнее: математической задаче, которую решает ваш алгоритм.Хорошая новость: в этом «водопаде» нет ничего плохого.
Мой совет: разделите его на несколько методов, каждый из которых имеет только два или три параметра, а затем объедините эти методы в цепочку.Поскольку большинство из этих методов будут довольно короткими и не будут содержать циклов или различий, вы можете пометить их с помощью inline для оптимизации ( см. Здесь ).

...