matematykaszkolna.pl
c++ hiko: obliczanie cosinusa w c++ z szeregu Taylora nie wiem, dlaczego, otrzymuje złe wyniki: #include <iostream> using namespace std; double power(int a, int n); double factorial(int a); double licz(int x, int n); int main(){ int x,n; cout << "podaj 'x' i stopien dokladnosci"; cin >> x >> n; cout << licz(n,x); return 0; } double licz(int x, int n){ double result=0; for(int i=0;i<n;i++){ result += power(−1,n) * power(x,2*n) / factorial(2*n); } return result; } double power(int a, int n){ if(n==0) return 1; else{ return a*power(a,n−1); } } double factorial(int a){ if(a==0 || a==1) return 1; else{ return a*factorial(a−1); } }
31 paź 19:58
jc: Czytanie długich kodów, jeśli rozwiązanie jest proste, nie jest przyjemne. Spójrz na to: double licz(int n, double x){ double s = 0; for(; n > 0; n−−) s = (1−s)*x*x/(2*n+1)/2/n; return (1−s)*x; }
31 paź 20:34
jc: Oj, teraz zauważyłem, że szukasz kosinusa. W takim razie powinno być tak: double licz(int n, double x){ double s = 0; for(; n > 0; n−−) s = (1−s)*x*x/2/n/(2*n−1); return 1−s; }
31 paź 21:45
hiko: dzieki, ale niestety też nie pokazuje wynikow przynajmniej zblizonych do faktycznych wartosci
31 paź 22:46
jc: Dla jakich n i x otrzymujesz złe wyniki?
31 paź 22:55
hiko: np. x=45 i n=10
31 paź 23:18
jc: Bo dla tak dużego x nic dobrego nie wyjdzie. Jak chcesz mieć dokładny wynik, odejmujesz pewną wielokrotność 2π, tak aby − π ≤ x ≤ π. A może chcesz podawać x w stopniach? Wtedy musisz wstępnie pomnożyć x przez π/180.
31 paź 23:29
hiko: i wszystko jasne... cały czas oczekiwałem wyniku jakoby x byłoby w stopniach a nie radianach ahh przykra pozostałość po liceum gdzie nie zwracano na to uwage i niemal zawsze liczba za f.trygonometryczna oznaczala stopnie wielkie dzieki emotka
31 paź 23:35