Utrata cyfr znaczących
Z Wikipedii
Należy w nim poprawić: styl momentami nieencyklopedyczny.
Więcej informacji co należy poprawić, być może znajdziesz na odpowiedniej stronie. W pracy nad artykułem należy korzystać z zaleceń edycyjnych. Po naprawieniu wszystkich błędów można usunąć tę wiadomość.
Możesz także przejrzeć pełną listę stron wymagających dopracowania.
Utrata cyfr znaczących
Jest zjawiskiem pojawiającym się w obliczeniach komputerowych, konsekwencją zapisu liczb rzeczywistych w komputerze. Występuje ona podczas odejmowania liczb, których różnica jest znaczenie mniejsza niż każda z tych liczb.
Rozważmy dwie takie, bliskie sobie, liczby: x i y
Są one dane w postaci
gdzie mt jest mantysą - liczbą długości t taką, że , a c cechą - dowolną liczbą całkowitą
rd(x) = +/- 0 . 1![]()
rd(y) = +/- 0 . 1-------------------------------------------------- - 0 . 0 0 0 0 0 0 ...
![]()
W wyniku odejmowania bliskich liczb powstaje liczba zawierająca na pierwszych n-i pozycjach zera, na pozostałych (przynajmniej jedną)jedynki - musi ona być znormalizowana, tj. przedstawiona w postaci:
gdzie
Aby otrzymać mantysę spełniającą ten warunek, należy "obciąć" początkowe zera w liczbie x-y (poprzez pomożenie przez 2n − i) - wtedy jednak "zabraknie liczb z tyłu" - tych kilka ostatnich niezerowych cyfr x-y przesunie się na pierwszą pozycję, i jeżeli i<t komputer nie będzie wiedział czym zapełnić pozostałe miejsca w mantysie (właściwe zostały wcześniej odrzucone, przez zaokrąglenie x i y!). Co gorsze, przyjęcie, że te "brakujące pozycje" zapełnimy np.zerami, jest tak samo dobre jak zapełnienie ich losowymi liczbami - w obu wypadkach będą to "śmiecie" nie mające wiele wspólnego z rzeczywistym (lub choćby do niego zbliżonym) wynikiem...
x = 0,
Mamy błąd względny różnicy x i y:
Gdy różnica |x-y| dąży do zera, błąd względny z rośnie nieograniczenie.
Jako przykład zadania źle uwarunkowanego niech posłuży nam prosta funkcja:
Prosta funkcja której wartości każdy potrafi policzyć... Nie każdy! Komputer nie potrafi! Przynajmniej w pewnej sytuacji: zauważ, że dla x w pobliżu zera wartość pod pierwiastkiem jest bardzo bliska 3 - może wystąpić (i występuje!) utrata cyfr znaczących.
Prostym sposobem na poradzenie sobie z tym problemem jest przekształcenie wzoru naszej funkcji:
Mamy więc wzór algebraicznie równoważny, a nie zawierający operacji odejmowania - teraz nawet dla x bliskich 3 nie stracimy dokładności wyniku!
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 - jeżeli ktoś "złośliwie" dobierze nam współczynniki wielomianu, wartość − b i mogą być dość bliskie - nastąpi utrata cyfr znaczących!
Z pomocą mogą nam przyjść Wzory Viète'a - obliczymy dobrze uwarunkowany pierwiastek "wprost", drugi otrzymamy z tychże wzorów!