Dlaczego funkcja blad_wzgledny wypisuje co innego w przypadku, gdy argumentem funkcji jest inna funkcja, i w przypadku gdy argumentem jest zmienna do której wcześniej przypisałem wartość tą samą funkcją?
Z printów których użyłem w funkcji blad_wzgledny i wynika, że zmiana 2 argumentu zmienia wartość pobieranego **1 argumentu **. Nie rozumiem tego.
1 wersja (zła)
printf("sech_szereg = %lf\n",sech_szereg(x,dokladnosc));
printf("%29lf%%\n", 100 * blad_wzgledny(sech_szereg(x, dokladnosc), sech_wzor(x))); //to oblicza źle
printf(" %lf%%\n", 100 * blad_wzgledny(sech_szereg(x, dokladnosc), 1. / cosh(x))); //to oblicza dobrze
2 wersja (dobra)
double sw = sech_wzor(x);
printf("sech_szereg = %lf\n",sech_szereg(x,dokladnosc));
printf("%29lf%%\n", 100 * blad_wzgledny(sech_szereg(x, dokladnosc), sw)); //to oblicza dobrze
printf(" %lf%%\n", 100 * blad_wzgledny(sech_szereg(x, dokladnosc), 1. / cosh(x))); //to oblicza dobrze
funkcja blad_wzgledny
double blad_wzgledny(double wart_mierzona, double wart_dokladna) {
printf("wart_mierzona %lf\nwart_dokladna%lf \n",wart_mierzona, wart_dokladna);
double blad = (wart_mierzona - wart_dokladna) / wart_dokladna;
printf("blad %lf\n",100*blad);
return (blad);
}
1 wersja (zła)
sech_szereg = 0.265803
wart_mierzona 0.154310
wart_dokladna 0.265802
blad -41.945624
2 wersja (dobra)
sech_szereg = 0.265803
wart_mierzona 0.265803
wart_dokladna 0.265802
blad 0.000232