Utrata cyfr znaczących

Z Wikipedii, wolnej encyklopedii

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 | edytuj kod]

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 | edytuj kod]

Przykład 1[edytuj | edytuj kod]

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 | edytuj kod]

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 | edytuj kod]

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 | edytuj kod]

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.