[C++] Obliczanie funkcji sinus

adam1407
Użytkownik
Użytkownik
Posty: 31
Rejestracja: 27 lis 2013, o 16:56
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 2 razy
Pomógł: 2 razy

[C++] Obliczanie funkcji sinus

Post 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?
Awatar użytkownika
Peter Zof
Użytkownik
Użytkownik
Posty: 584
Rejestracja: 30 cze 2012, o 16:07
Płeć: Mężczyzna
Lokalizacja: Warszawa (MIMUW) / Pułtusk
Podziękował: 88 razy
Pomógł: 66 razy

[C++] Obliczanie funkcji sinus

Post autor: Peter Zof »

A nie możesz skorzystać z gotowej funkcji sin(double x) zdefiniowanej w <cmath> ?
adam1407
Użytkownik
Użytkownik
Posty: 31
Rejestracja: 27 lis 2013, o 16:56
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 2 razy
Pomógł: 2 razy

[C++] Obliczanie funkcji sinus

Post autor: adam1407 »

Zdecydowanie nie ;d
random5578
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 20 mar 2014, o 13:21
Płeć: Mężczyzna

[C++] Obliczanie funkcji sinus

Post 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.
adam1407
Użytkownik
Użytkownik
Posty: 31
Rejestracja: 27 lis 2013, o 16:56
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 2 razy
Pomógł: 2 razy

[C++] Obliczanie funkcji sinus

Post 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}\)
random5578
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 20 mar 2014, o 13:21
Płeć: Mężczyzna

[C++] Obliczanie funkcji sinus

Post 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.
adam1407
Użytkownik
Użytkownik
Posty: 31
Rejestracja: 27 lis 2013, o 16:56
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 2 razy
Pomógł: 2 razy

[C++] Obliczanie funkcji sinus

Post 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}\)
Awatar użytkownika
steal
Użytkownik
Użytkownik
Posty: 1040
Rejestracja: 7 lut 2007, o 18:35
Płeć: Mężczyzna
Lokalizacja: Białystok|Warszawa
Podziękował: 6 razy
Pomógł: 160 razy

[C++] Obliczanie funkcji sinus

Post autor: steal »

U mnie również podaje poprawne wartości. Czy ten zapis pojawia się dla dowolnych danych wejściowych?
adam1407
Użytkownik
Użytkownik
Posty: 31
Rejestracja: 27 lis 2013, o 16:56
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 2 razy
Pomógł: 2 razy

[C++] Obliczanie funkcji sinus

Post autor: adam1407 »

Dla większości. Przy niektórych wyskakuje np sama liczba całkowita. Mój kompilator to Dev++. Ktoś ma jakiś pomysł?
ODPOWIEDZ