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; }