Poszukuję rozwiązania pewnego problemu

0

Czołem! Na wstępie przepraszam za tak ogólny temat, ale nie miałem pomysłu jak go określić. Ale do rzeczy. Piszę pewną dllkę, i jest tam taki zapis (zapiszę schematycznie):

double y = log(x1) + log(x2) + log(x3) + log(x4) + log(x5);

Wartości x1 - x5 są przekazywane z zewnątrz. Gdy x1 - x5 są większe od zera program się wykonuje, nie ma błędów, natomiast gdy jedna z tych zmiennych wynosi 0, program nie wykonuje się - co jest zresztą zrozumiałe. Chciałbym aby program, w momencie podania jednej bądź kilku (maksymalnie czterech) wartości zmiennej (zmiennych) x równej (równych) 0, omijał liczenie logarytmu naturalnego z 0. Np. jeżeli x1 i x2 byłyby równe 0, program liczyłby y jako:

double y = log(x3) + log(x4) + log(x5);

Z góry dziękuję za pomoc.

0

Srsly? Piszesz dllke i masz problem z czymś takim? o_O

list<double> correctValues;
for(int i=0;i<n;i++){
  if(x[i] > 0){
    correctValues.push_back(x[i]);
  }
}

i voila, masz listę elementów o poprawnych wartościach, teraz już tylko przeiterować po tej liście, wyliczyc log() dla każdego elementu i zsumować.

0
double logEx( double r) { if ( r > 0 return log(r); else return 0; }

double y = logEx(x1) + logEx(x2) + logEx(x3) + logEx(x4) + logEx(x5);

;)

0

Dzięki Panowie. Kult, tak z ciekawości - Ex to od external?

0

Witam ponownie. Podczas pisania programu natrafiłem na problem tej samej natury co na początku wątku, tylko bardziej skomplikowany, więc przedstawię go tutaj. Otóż chcę obliczyć smix:
<image>2.png</image>
przy czym sk:
<image>1.png</image>
k = 0 - 4
x jest wektorem 5 elementowym, o elementach x0 - x4
d jest wektorem 11 elementowym, o elementach d0 - d10
we wzorze b jest wektorem 10 elementowym, którego indeksowanie zaczyna się od 1 (tak jest w dokumencie z którego pochodzą powyższe wzory), w programie indeksowanie zaczyna się oczywiście od 0, więc element bi ze wzoru jest u mnie elementem b[i-1].
Tak jak poprzednio, gdy xk = 0 logarytm naturalny nie powinien być liczony (w zasadzie sk również nie powinno być wtedy liczone).
Aby to zaimplementować kombinuję z użyciem konstrukcji for/if, ale zdaje się to mnie przerastać. Zwracam się do Was, ludzi dobrej woli :) , o pomoc w rozwiązaniu tego problemu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1