Witam
Napisałem program, który liczy arctan (rozwiniecie w szereg) ale jest problem z błędem względnym bo wychodzi za duży. Proszę o sprawdzenia kodu i o pomoc w modyfikacji.
#include <stdio.h>
#include <math.h>
#define PI 3.1415926535
int sgn(double x){
if(x>0) return 1;
if(x<0) return -1;
}
double arctg(double x){
double suma;
double wyraz;
int znak;
int n = 1;
if(abs(x)<=1){
suma = 0;
wyraz = x;
znak = -1;
do{
suma=suma+wyraz;
wyraz=wyraz*znak*((2*n-1)*x*x)/(2*n+1);
znak=znak*(-1);
n++;
}while(fabs(wyraz)>1e-7);
return suma;
}
else{
suma = sgn(x)*(PI/2);
wyraz = -1/x;
znak = -1;
do{
suma=suma+wyraz;
wyraz=wyraz*znak*1/(((2*n-1)*x*x)/(2*n+1));
znak=znak*(-1);
n++;
}while(fabs(wyraz)>1e-7);
return suma;
}
}
int main(void){
double x=-10;
printf("%d\n\n",sgn(x));
printf("\tx \t arctan \t atan \t\t blad wzgledny\n");
while(x<10){
printf("%f \t %7.7f \t %6.8f \t %6.8f \n", x, arctg(x), atan(x),
fabs(arctg(x)-atan(x))/fabs(atan(x)));
x+=1;
}
getchar();
getchar();
}
Pozdrawiam