1. Błędy obliczeń numerycznych 17
Jak widać nie jest spełnione prawo łączności dodawania w obliczeniach zmiennopozycyjnych bowiem: tl(a+ fl(b + c))* fl(fl(a+b)+c).
Podczas wszelkich operacji arytmetycznych jesteśmy narażeni na kumulowanie się błędów a nawet na ich powstawanie wskutek ograniczonej dokładności reprezentacji wyniku działań w pamięci komputera. Przykładowo dodając do siebie bardzo dużą i bardzo małą liczbę w wyniku możemy otrzymać wartość większej zamiast sumy tych liczb, co pokazuje przykład 1.6.
Przykhid 1.6.
Błąd wynikacjący z niewystarczająco dużej mantysy można pokazać na przykładzie obliczania sumy dwóch liczb: a = 231 000 000.0 b = 0.000 000 384 a+b = 231 000 000.000 000 384
Jeśli długość mantysy wynosi np. 10 cyfr znaczących, to dla dodawania zmiennopozycyjnego otrzymamy: fl(a+b) = 231 000 000.0 czyli:
fl(a+b)= a (!!!).
Wskutek powyższego może pojawić się problem np. pętli nieskończonej, jeśli w kolejnych iteracjach warunek zakończenia bazuje na dodawaniu bardzo małej do bardzo dużej wartości.
Błędy wynikające z reprezentacji liczb można zmniejszyć ustalając umiejętnie sposób i kolejność wykonywanych działań. Wpływ arytmetyki zmiennopozycjnej na wynik obliczeń w zależności od zastosowanego algorytmu pokazuje przykład 1.7.
Przykład 1.1.
Dla danych a, b obliczyć wartość wyrażenia w=a2-b2'. Zakładamy, że mantysa jest reprezentowana na d bitach oraz błędy reprezentacji wynoszą e, < T*.
Obliczenia wykonamy dwoma algorytmami.