Niedawne zadanie domowe, które otrzymałem, prosi nas o wyrażenie, które może spowodować utratę precyzji podczas wykonywania w komputerze, i zmienić je tak, aby uniknąć tej straty.Najlepszy algorytm do unikania utraty precyzji?
Niestety, wskazówki dotyczące tego nie zostały jasno określone. Obserwując różne przykłady, wiem, że istnieją pewne metody, aby to zrobić: używając serii Taylora, używając koniugatów, jeśli zaangażowane są pierwiastki kwadratowe, lub znajdując wspólny mianownik, gdy odejmowane są dwie frakcje.
Mam jednak pewne problemy z zauważeniem, kiedy dokładnie nastąpi utrata precyzji. Do tej pory jedyne, co wiem na pewno, to to, że gdy odejmiesz dwie liczby, które są bliskie tego samego, utracisz precyzję, ponieważ wysokie cyfry są znaczące i tracisz je zaokrąglając.
Moje pytanie brzmi: jakie są inne typowe sytuacje, których powinienem szukać i jakie są uważane za "dobre" metody ich zbliżania się?
Na przykład, tutaj jest jeden problem:
f(x) = tan(x) − sin(x) when x ~ 0
Jaki jest najlepszy i najgorszy algorytm do oceny to z tych trzech opcji:
(a) (1/ cos(x) − 1) sin(x),
(b) (x^3)/2
(c) tan(x)*(sin(x)^2)/(cos(x) + 1).
Rozumiem, że gdy x jest blisko zero, tan (x) i sin (x) są prawie takie same. Nie rozumiem, jak i dlaczego któryś z tych algorytmów jest lepszy lub gorszy w rozwiązaniu problemu.