Utrata cyfr znaczących

Utrata cyfr znaczących – zjawisko pojawiające się w obliczeniach komputerowych, konsekwencja zapisu liczb rzeczywistych w komputerze. Występuje ona np. podczas odejmowania liczb, których różnica jest znacznie mniejsza niż każda z tych liczb. W efekcie liczba cyfr znaczących wyniku maleje do nieakceptowalnie niskiego poziomu. Sposoby ograniczania bądź unikania takich efektów bada analiza numeryczna.

Wytłumaczenie zjawiska

edytuj

Niech   i   będą bliskimi liczbami, których różnica jest znacznie mniejsza od każdej z nich. Niech   i   oznacza reprezentację liczb odpowiednio   i   w pamięci komputera. Liczby   oraz   dane są w postaci   gdzie   jest mantysą – liczbą długości   taką, że   a   jest cechą – dowolną liczbą całkowitą

 

W wyniku odejmowania bliskich liczb powstaje liczba zawierająca na pierwszych   pozycjach zera, na pozostałych pozycjach co najmniej jedną jedynkę. Liczba będąca wynikiem odejmowania musi być znormalizowana, tj. przedstawiona w postaci:

 

gdzie  

Aby otrzymać mantysę spełniającą ten warunek, należy „obciąć” początkowe zera w liczbie   (poprzez pomożenie przez  ) – wtedy jednak ostatnie niezerowe cyfry na pozycjach   zostaną przesunięte na pierwsze pozycje, i jeżeli   nie będzie wiadomo, czym zapełnić pozostałe miejsca w mantysie (właściwe zostały wcześniej odrzucone, przez zaokrąglenie   i  ). Przyjęcie, że te utracone pozycje zostaną zapełnione np. zerami, jest tak samo dobre jak założenie, że zostaną one zapełnione losowymi liczbami – w obu wypadkach będą to bezwartościowe dane, niemające wiele wspólnego z rzeczywistym, lub choćby do niego zbliżonym wynikiem.

Gdy różnica   dąży do zera, błąd względny   rośnie nieograniczenie.

Przykłady

edytuj

Przykład 1

edytuj

Za przykład zadania źle uwarunkowanego, tj. takiego, w przypadku którego może dojść do utraty cyfr znaczących w trakcie obliczeń komputerowych, może posłużyć prosta funkcja:

 

Dla   w pobliżu zera wartość pod pierwiastkiem jest bardzo bliska 3 i w przypadku obliczeń dokonywanych przy pomocy komputera występuje utrata cyfr znaczących.

Rozwiązanie

edytuj

Prostym sposobem na poradzenie sobie z tym problemem jest przekształcenie wzoru naszej funkcji:

 

Jest to wzór algebraicznie równoważny, a nie zawierający operacji odejmowania – teraz nawet dla   bliskich 0 w przypadku obliczeń komputerowych nie wystąpi zjawisko utraty cyfr znaczących.

Przykład 2

edytuj

Innym przykładem na to, że nawet najprostsze algorytmy mogą być źle uwarunkowane, jest „szkolny” algorytm obliczania pierwiastków równania kwadratowego

 
 

W sposobie obliczenia jednego z pierwiastków jest odejmowanie. Możliwa jest sytuacja, w której wartość   i   mogą być dość bliskie zeru co do modułu – nastąpi utrata cyfr znaczących.

Rozwiązanie

edytuj

Sposobem na ominięcie tego problemu mogą być Wzory Viète’a – dobrze uwarunkowany pierwiastek może być obliczony „wprost”, drugi otrzymany ze wzoru Viète’a. Należy również zauważyć, że możemy mieć tutaj do czynienia z dwoma przypadkami, tj.   oraz   Dla pierwszego przypadku dobrze uwarunkowanym będzie pierwiastek pierwszy, a dla drugiego przypadku dobrze uwarunkowanym będzie pierwiastek drugi.