Eine kürzliche Hausaufgabe, die ich erhalten habe, fordert uns auf, Ausdrücke zu nehmen, die im Computer einen Präzisionsverlust verursachen könnten, und sie so zu verändern, dass dieser Verlust vermieden wird.Bester Algorithmus zur Vermeidung von Genauigkeitsverlust?
Leider wurden die Anweisungen dafür nicht sehr klar gemacht. Aus der Beobachtung verschiedener Beispiele weiß ich, dass es bestimmte Methoden gibt, um dies zu tun: Taylor-Reihen zu verwenden, Konjugate zu verwenden, wenn Quadratwurzeln beteiligt sind, oder einen gemeinsamen Nenner zu finden, wenn zwei Brüche subtrahiert werden.
Allerdings habe ich einige Schwierigkeiten, genau zu bemerken, wann ein Genauigkeitsverlust auftreten wird. Bis jetzt ist das einzige, was ich sicher weiß, dass, wenn Sie zwei Zahlen subtrahieren, die nahe daran sind, die gleichen zu sein, ein Verlust der Genauigkeit auftritt, da Ziffern hoher Ordnung signifikant sind, und Sie diese von der Rundung verlieren.
Meine Frage ist, was sind einige andere häufige Situationen, die ich suchen sollte, und was gelten als "gute" Methoden, sie zu nähern?
Zum Beispiel, hier ist ein Problem:
f(x) = tan(x) − sin(x) when x ~ 0
Was ist der beste und schlechteste Algorithmus dies aus diesen drei Möglichkeiten zur Bewertung:
(a) (1/ cos(x) − 1) sin(x),
(b) (x^3)/2
(c) tan(x)*(sin(x)^2)/(cos(x) + 1).
Ich verstehe, dass, wenn x in der Nähe von null, tan (x) und sin (x) sind nahezu gleich. Ich verstehe nicht, wie oder warum diese Algorithmen besser oder schlechter sind, um das Problem zu lösen.