Mam drobny problem z niezwykle ciekawym tematem jakim jest zaprogramowanie funkcji liczącej arcsinx ze wzoru Taylora. Problemem jest tutaj, a jakże, dokładność obliczeń a mianowicie jej brak.
Użytkownik ma za zadanie wywołać funkcje, wpisać zmienną, dla której trzeba chce ją liczyć, a następnie dokładność, czyli miejsce po przecinku do którego chce liczyć, czyli do którego miejsca po przecinku wynik ma być dokładny. W przypadku tej funkcji, chciałem zastosować ten sam patent, co w przypadku innych, które już napisałem wcześniej, lecz w przypadku arcsinx wyniki są niepoprawne:
Oto kod funkcji w wersji uproszczonej:
void arcsinus(void)
{
double x = 0.98; // nasza zmienna |x| <= 1
double approx = 0.01; // TUTAJ SIEDZI NASZA ZMIENNA POTRZEBNA DO BADANIA DOKLADNOSCI - nalezy ja modyfikowac w celu ustalenia dokladnosci
double temp = x;
double final = x;
double pre = 0;
int n = 1;
while(n < 100000)
{
temp *= ((x*x)*(2*n-1)*(2*n-1))/((2*n)*(2*n+1));
final += temp;
n++;
if( ((pre - final) > 0 ? (pre - final) : -(pre - final)) - approx < 0 )
break;
pre = final;
}
printf("\nWartosc arcsin: %.15f\n" , final);
}
Dzięki za pomoc.