chce obliczyc liczbe e ze wzoru :
nie mam pojecia jak zapisac kod , prosze o pomoc.
double silnia(int silnia){
double tmp = 1;
if(silnia == 1 || silnia == 0)return 1;
for(int i=2;i<=silnia;i++)
tmp *= i;
return tmp;
}
double pow(int base,int exp){
double tmp=base;
if(base == 0)return 1;
if(base == 1)return base;
for(int i=0;i<exp;i++)
tmp*=base;
return tmp;
}
double euler(int x){
double tmp=0;
for(int i=0;i<=x;i++)
tmp += pow(x,i)/silnia(i);
return tmp;
}
Funkcji "pow" nie trzeba implementować samodzielnie - można skorzystać z dobrodziejstwa podstawowych bibliotek i wykorzystać funkcję "pow" z biblioteki "cmath" ;-)
A tak poza tym to dlaczego zabijasz jego myślenie dając mu gotowe rozwiązanie? :> :-P
Kod podany przez @khadgara jest niedobry.
- Dlaczego przy liczeniu ex należy zsumować akurat x+1 składników?
- Jeżeli mamy już wyliczony składnik , to kolejny należy liczyć tak . Użycie funkcji silnia() i pow() jest niewłaściwe.
bogdans_niezalogowany napisał(a)
Kod podany przez @khadgara jest niedobry.
- Dlaczego przy liczeniu ex należy zsumować akurat x+1 składników?
- Jeżeli mamy już wyliczony składnik , to kolejny należy liczyć tak . Użycie funkcji silnia() i pow() jest niewłaściwe.
Dodam jeszcze:
3. A gdyby ktoś chciał policzyć
Ad 1. Wyrazy podanego ciągu należy sumować aż do osiągnięcia założonej dokładności.
Można dużo optymalniej.
Zamiast liczyć dla każdego wyrazu ciągu silnia i potęga, można akumulować wynik. Ewentualnie spamiętywać poprzednie wyniki.
@up, nie wymyślasz przypadkiem koła i prochu na nowo?
Nie rozumiem gdzie tu wymyślanie koła na nowo, może mnie źle zrozumiałeś.
Taki kod:
float nominator = x;
float denominator = 1;
float sum = 1;
for(int i = 1 i < n; ++i) {
sum += nominator/denominator;
nominator *= x;
denominator *= denominator+1;
}
Jest krótszy i wydajniejszy (nie będe się wgłebiał ile ma n wynosić ;P)
W tym widzę wymyślanie koła, że ja to napisałem wcześniej.
... to kolejny należy liczyć tak . Użycie funkcji silnia() i pow() jest niewłaściwe.
Tzn uważasz się za wynalzcę koła? :-D ;-)
Za wynalazcę to nie, ale za pierwszego, który przypomniał, że lepiej jeździć na kołach niż na elipsach czy innych trójkątach. ;-)