Cosinus hiperboliczny

Ktoś poprosił mnie pewien czas temu o napisanie własnej implementacji Cosinusa Hiperbolicznego (http://pl.wikipedia.org/wiki/Funkcje_hiperboliczne) w oparciu o szereg Taylora. Wersja na szybko jako proof of concept:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double silnia (double n){
       if (n <= 1)
          return 1;
       else
          return  silnia(n - 1)*n;
}

double mycosh(double z){
       double result =1;
       int ilosc_wyr_ciagu=30;
       int i;
       for (i=1;i<ilosc_wyr_ciagu;i++){
           result += pow(z,2*i)/silnia(2*i); 
           /*
           //odkomentowac jesli chcemy zobaczyc jak maleje delta i czemu ilosc_wyr_ciagu=30
           double delta;
           printf ("iteracja:%d, delta:%.40f\n",i, ( delta=(pow(z,2*(i-1))/silnia(2*(i-1)))-(pow(z,2*i)/silnia(2*i))  )) ;
           if(delta == 0)printf("ZERO");
           */
           }
       return result;
}



int main(int argc, char *argv[])
{
  double arg,c1,c2,blad;  
  arg= 3.113408;  
  c1 = cosh(arg);
  c2 = mycosh(arg);
  blad = abs(c2-c1)/c2;
  printf( " z=%f; cosh(z)=%f; mycosh(z)=%f; blad=%.90f \n",arg,c1,c2,blad);
  
  system("PAUSE");    
  return 0;
}