[C++] Obliczanie wartości sin(x)

mario765i
Użytkownik
Użytkownik
Posty: 22
Rejestracja: 23 paź 2011, o 10:47
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 2 razy

[C++] Obliczanie wartości sin(x)

Post autor: mario765i »

Witam! Mam do napisania program w c++, który wyznacza wartość \(\displaystyle{ \sin(x)}\) i porównuje ją z wartością \(\displaystyle{ \sin(x)}\) z biblioteki cmath. Dla małych wartości argumentu x wyniki są zbliżone, natomiast dla dużych wartości argumentu x - już znacznie się różnią. Jak poprawić program, aby dla dużych wartości argumentu x działał dokładniej? Proszę o pomoc. Oto mój kod (piszę w CodeBlocks):

Kod: Zaznacz cały

#include<iostream>
#include<cmath>
#include<iomanip>

using namespace std;

double my_sin(double x)
{
	double sum = 0.0, add, sign;

	const int iterations = 20;
	add = x;
	sum = add;
	sign = 1.0;
	for (int k=1; k<iterations; k++)
	{
		add = add*x*x/(2*k)/(2*k+1);
		sign = -sign;
		sum = sum+sign*add;
	}
	return sum;
}

int main()
{
	cout << "Porownanie funkcji my_sin z funkcja biblioteczna sin
";
	cout << "x	|	my_sin		|	sin		|	rel_err
";

	for (double x = 10.0; x <= 10+2*M_PI; x = x+0.05)
	{
		double yp  = my_sin(x);
		double y   = sin(x);
		double err = abs(y-yp)/abs(y);

		cout.precision(2);
		cout << fixed;
		cout << x  << "	|	";
		cout.precision(10);
		cout << yp << "	|	";
		cout << y  << "	|	";
		cout.precision(2);
		cout << scientific << err << "
";
	}
	return 0;
}
Ostatnio zmieniony 27 paź 2011, o 23:02 przez Afish, łącznie zmieniany 1 raz.
Powód: Otagowanie tematu, poprawka TeXa
norwimaj
Użytkownik
Użytkownik
Posty: 5101
Rejestracja: 11 mar 2011, o 16:31
Płeć: Mężczyzna
Lokalizacja: 52°16'37''N 20°52'45''E
Podziękował: 4 razy
Pomógł: 1001 razy

[C++] Obliczanie wartości sin(x)

Post autor: norwimaj »

Pomyśl nad kolejnością sumowania. Co prawda w matematyce czystej dodawanie jest przemienne, ale w metodach numerycznych już tak nie jest.
abc666

[C++] Obliczanie wartości sin(x)

Post autor: abc666 »

mario765i, a nie możesz przed wykonaniem tych działań obliczyć policzyć x % 2*pi ?
Xitami

[C++] Obliczanie wartości sin(x)

Post autor: Xitami »

20 iteracji to nie jest zbyt wiele
a zmień warunek w pętli na "add!=0" lub "sum != sum+add"
ODPOWIEDZ