Na stronie http://www.algorytm.edu.pl/cwiczenia-iteracje.html ćwiczenie 5. Jest podane rozwiązanie do tego ćwiczenia, dosyć proste i przejrzyste, ale jednak chciałbym aby ktoś wskazał dlaczego napisany przeze mnie kod nie działa jak trzeba (wyświetla się pierwsza liczba podana przez użytkownika albo napis inf lub nan).
Byłbym bardzo wdzięczny za wytłumaczenie tego w przystępny sposób. Poniżej wrzucam kod
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
/* Moj nie dzialajacy kod
double x;
long double suma = 0;
int n,y;
unsigned long long silnia[1000];
int i,j=0; //liczniki petli
silnia[0]=1;
y=0; j=0;
cout << "Podaj argument x funkcji sinus, a nastepnie ilosc wyrazow szeregu Taylora n\n";
cin >> x >> n;
for (i=1; i<=n; i=i+1)
{
suma = suma + (pow(x,2*y+1))/silnia[j] * pow(-1,y);
// * pow(-1,y) zeby co drugi wyraz sumy byl ujemny
y = y +1;
for (j=1; j=(2*y)+1; j++)
{
silnia[j] = silnia[j-1]*j;
}
cout << suma;
}
cout << fixed << setprecision(4) << "sin(x) wynosi " << suma << endl;
Moj nie dzialajacy kod*/
//Ponizej poprawny kod
double x, wynik;
unsigned int n, jeden = 1;
unsigned long long silnia = 1, spom = 1, potega;
cout<<"Podaj argument funkcji sinus: ";
cin>>x;
potega = x;
wynik = x;
cout<<"Podaj liczbę wyrazów szeregu Taylora: ";
cin>>n;
for(int i=1;i<n;i++)
{
++jeden; //odpowiada za to, czy potęga (-1) jest parzysta czy nie
potega = potega * x * x; //wyznaczanie potęgi
silnia = silnia * (++spom) * (++spom); //wyznaczanie silnie
wynik = wynik +(jeden%2==0?-1:1) * (double)potega/(double)silnia;
}
cout<<"sin("<<x<<") = "<<fixed<<setprecision(6)<<wynik<<endl;
system("pause");
return 0;