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:
[cpp]
#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;
}
[/cpp]