Strona 1 z 1

[C++] Obliczanie funkcji sinus

: 20 mar 2014, o 15:19
autor: adam1407
Witam. Muszę napisać program, który będzie mi obliczał wartość funkcji sinus od zadanego argumentu. Skorzystałem z rozwinięcia w szereg i skleiłem coś takiego :

Kod: Zaznacz cały

#include <iostream>
#include <math.h>
using namespace std;
	
	
	
	int silnia(int n)
{
     switch (n)
      { 
            case 0: return 1;
                    break;
            default: return n * silnia(n-1);
      }
} 	
	
int main ()
{
	int x;
	cout << " Podaj wartosc dla ktorej obliczony ma byc sinus " <<endl;
	cin >> x;
	int n;
	cout << " Podaj liczbe do ktorej chcesz sumowac szereg " <<endl;
	cin >> n; 
    long double sinx = 0;
    
    	for (int i = 0 ; i<=n ; i++){
			
			long double s = pow(x,2*i+1);		
			int j = pow(-1,i);
			
			int m = silnia(2*i+1);
			
			sinx += j * (s/m);
		}
			
		
	cout << " Sinus wartosci ktora podales wynosi " << sinx <<endl; 
	
	
}
Program się kompiluje tylko podaje mi złe wartości. Ktoś pomoże znaleźć błąd?

[C++] Obliczanie funkcji sinus

: 20 mar 2014, o 15:28
autor: Peter Zof
A nie możesz skorzystać z gotowej funkcji sin(double x) zdefiniowanej w <cmath> ?

[C++] Obliczanie funkcji sinus

: 20 mar 2014, o 15:30
autor: adam1407
Zdecydowanie nie ;d

[C++] Obliczanie funkcji sinus

: 20 mar 2014, o 15:44
autor: random5578
Zamień x z int na long double, a inne inty na long longi, poza tym już dla \(\displaystyle{ n>=10,\quad(2n+1)! > 10^{20}}\), a to przekracza zakres nawet long longa.

[C++] Obliczanie funkcji sinus

: 20 mar 2014, o 15:55
autor: adam1407
Nawet po zamianie wypluwa mi absurdalne wartości np : dla x = 1 i n=5 dostaję w konsoli wartość sinusa \(\displaystyle{ -1,28e+113}\)

[C++] Obliczanie funkcji sinus

: 20 mar 2014, o 17:40
autor: random5578
Ukryta treść:    
Zamieniłem jeszcze s na long doble i ten kod dla \(\displaystyle{ x = 1}\) i \(\displaystyle{ n = 5}\) daje \(\displaystyle{ \sin (x) = 0. 841471}\), czyli raczej działa.

[C++] Obliczanie funkcji sinus

: 20 mar 2014, o 17:50
autor: adam1407
Po Twojej lekkiej modyfikacji wynik dalej wynosi tyle ile wcześniej. Skoro u Ciebie wyświetla się prawidłowy wartość to co w takim razie oznacza ten zapis u mnie?

\(\displaystyle{ -1,28e+113}\)

[C++] Obliczanie funkcji sinus

: 20 mar 2014, o 19:51
autor: steal
U mnie również podaje poprawne wartości. Czy ten zapis pojawia się dla dowolnych danych wejściowych?

[C++] Obliczanie funkcji sinus

: 20 mar 2014, o 22:31
autor: adam1407
Dla większości. Przy niektórych wyskakuje np sama liczba całkowita. Mój kompilator to Dev++. Ktoś ma jakiś pomysł?