Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <math.h>
- int sgn(double x) {
- if (x > 0)
- return 1;
- else if (x < 0)
- return -1;
- else
- return 0;
- }
- double arctg(double x) {
- double suma, wyraz;
- int znak, n = 1;
- if (fabs(x) <= 1) {
- suma = 0;
- wyraz = x;
- znak = -1;
- do {
- n=1;
- suma = suma + wyraz;
- wyraz = wyraz * znak * ((2 * n - 1) * x * x) / (2 * n + 1);
- znak = znak * (-1);
- n++;
- } while (abs(suma) > 1e-7);
- return suma;
- }
- else {
- suma = sgn(x) * (M_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("%10s %10s %10s %10s\n","x","arctg(x)","atan(x)","error");
- while (x <= 10) {
- printf("%10f %3.7f %3.7f %3.7f\n", x, arctg(x), atan(x), fabs(arctg(x) - atan(x)) / fabs(atan(x)));
- x += 1;
- }
- getchar();
- getchar();
- return 0;
- }
- double arctg(double x) {
- assert(fabs(x) <= 1.0);
- if (fabs(x) <= 1) {
- // Zeby nie liczyc tego w kolko
- double xsqr = x*x;
- // Licznik
- double num = x;
- // Mianownik
- double denom = 1.0;
- // Pomocnicza zmienna, dzieki niej
- // oceniamy kiedy sie zatrzymać
- double tmp = 0.0;
- // Suma
- double sum = 0.0;
- do {
- tmp = num/denom;
- sum += tmp;
- num *= -xsqr;
- denom += 2.0;
- }while(fabs(tmp)>1e-5);
- return sum;
- }else {
- return 0.0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement