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
31 paź 23:35