Utrata znaczenia - Loss of significance

Przykład LOS w przypadku obliczania 2 postaci tej samej funkcji

Utrata znaczenia jest niepożądanym efektem w obliczeniach przy użyciu arytmetyki o skończonej precyzji, takiej jak arytmetyka zmiennoprzecinkowa . Występuje, gdy operacja na dwóch liczbach zwiększa błąd względny znacznie bardziej niż zwiększa błąd bezwzględny , na przykład przy odejmowaniu dwóch prawie równych liczb (znane jako anulowanie katastroficzne ). W efekcie liczba cyfr znaczących w wyniku jest niedopuszczalnie zmniejszona. Sposoby uniknięcia tego efektu są badane w analizie numerycznej .

Demonstracja problemu

Odejmowanie

Efekt można zademonstrować za pomocą liczb dziesiętnych. Poniższy przykład ilustruje katastroficzne anulowanie dla dziesiętnego typu danych zmiennoprzecinkowych z 10 cyframi znaczącymi:

Rozważ liczbę dziesiętną

x = 0.1234567891234567890

Reprezentacja zmiennoprzecinkowa tej liczby na maszynie, która przechowuje 10 cyfr zmiennoprzecinkowych, byłaby

y = 0.1234567891

co jest dość bliskie, gdy mierzy się błąd jako procent wartości. Jest bardzo różny, gdy mierzy się go w kolejności dokładności. Wartość „x” jest dokładna 10 × 10 −19 , podczas gdy wartość „y” jest dokładna tylko do 10 × 10 −10 .

Teraz wykonaj obliczenia

x - y = 0.1234567891234567890 − 0.1234567890000000000

Odpowiedź, z dokładnością do 20 cyfr znaczących, brzmi

0.0000000001234567890

Jednak na 10-cyfrowej maszynie zmiennoprzecinkowej obliczenia dają wynik

0.1234567891 − 0.1234567890 = 0.0000000001

W obu przypadkach wynik jest dokładny do tego samego rzędu wielkości co dane wejściowe (odpowiednio −20 i −10). W drugim przypadku odpowiedź wydaje się mieć jedną cyfrę znaczącą, co oznaczałoby utratę znaczenia. Jednak w komputerowej arytmetyce zmiennoprzecinkowej wszystkie operacje można postrzegać jako wykonywane na antylogarytmach , dla których reguły dotyczące cyfr znaczących wskazują, że liczba cyfr znaczących pozostaje taka sama, jak najmniejsza liczba cyfr znaczących w mantysach . Sposobem na wskazanie tego i przedstawienie odpowiedzi na 10 cyfr znaczących jest

   1.000000000×10−10


Utrata znaczących bitów

Niech x i y będą dodatnimi znormalizowanymi liczbami zmiennoprzecinkowymi.

Podczas odejmowania x - y , r znaczące bity są tracone, gdzie

dla niektórych dodatnich liczb całkowitych p i q .

Obejścia

Możliwe jest wykonywanie obliczeń przy użyciu dokładnej ułamkowej reprezentacji liczb wymiernych i zachowanie wszystkich cyfr znaczących, ale jest to często zbyt wolniejsze niż arytmetyka zmiennoprzecinkowa.

Jedną z najważniejszych części analizy numerycznej jest uniknięcie lub zminimalizowanie utraty znaczenia w obliczeniach. Jeśli podstawowy problem jest dobrze postawiony, powinien istnieć stabilny algorytm jego rozwiązania.

Czasami sprytne sztuczki algebry mogą zmienić wyrażenie w formę, która omija problem. Jedną z takich sztuczek jest użycie dobrze znanego równania

Więc za pomocą wyrażenia pomnóż licznik i mianownik, dając

Czy można teraz zredukować wyrażenie, aby wyeliminować odejmowanie? Czasami tak.

Na przykład, wyrażenie może utracić znaczące bity, jeśli jest znacznie mniejsze niż 1. Więc przepisz wyrażenie jako

lub

Niestabilność równania kwadratowego

Na przykład rozważmy równanie kwadratowe

z dwoma dokładnymi rozwiązaniami:

Ta formuła może nie zawsze dawać dokładny wynik. Na przykład, gdy jest bardzo mały, utrata znaczenia może wystąpić w każdym z obliczeń pierwiastka, w zależności od znaku .

Sprawa , , posłużą do zilustrowania problemu:

Mamy

W prawdziwej arytmetyce pierwiastki to

W 10-cyfrowej arytmetyce zmiennoprzecinkowej:

Zauważ, że rozwiązanie o większej wielkości jest dokładne do dziesięciu cyfr, ale pierwsza niezerowa cyfra rozwiązania o mniejszej wielkości jest błędna.

Z powodu odejmowania, które występuje w równaniu kwadratowym, nie stanowi stabilnego algorytmu obliczania dwóch pierwiastków.

Lepszy algorytm

Staranna implementacja komputera zmiennoprzecinkowego łączy kilka strategii w celu uzyskania solidnego wyniku. Zakładając, że dyskryminator b 2 - 4 ac jest dodatni i b jest różny od zera, obliczenia wyglądałyby następująco:

Tutaj sgn oznacza funkcję znaku , gdzie wynosi 1, jeśli jest dodatnia, a −1, jeśli jest ujemna. Pozwala to uniknąć problemów z anulowaniem między i pierwiastkiem kwadratowym dyskryminatora, zapewniając, że dodawane są tylko liczby o tym samym znaku.

Aby zilustrować niestabilność standardowego wzoru kwadratowego w porównaniu z tym wzorem, rozważ równanie kwadratowe z pierwiastkami i . Do 16 cyfr znaczących, które w przybliżeniu odpowiadają dokładności podwójnej precyzji na komputerze, moniczne równanie kwadratowe z tymi pierwiastkami można zapisać jako

Używając standardowego wzoru kwadratowego i zachowując 16 cyfr znaczących na każdym kroku, uzyskuje się standardowy wzór kwadratowy

Zwróć uwagę, jak anulowanie spowodowało, że zostało obliczone tylko do 8 znaczących cyfr dokładności.

Przedstawiona tutaj formuła wariantowa daje jednak następujące wyniki:

Zwróć uwagę na zachowanie wszystkich znaczących cyfr dla .

Należy zauważyć, że chociaż powyższe sformułowanie pozwala uniknąć katastrofalnego anulowania między terminami i , pozostaje forma anulowania między wyrazami a elementem wyróżniającym , co nadal może prowadzić do utraty nawet połowy prawidłowych cyfr znaczących. Aby tego uniknąć, dyskryminator musi być obliczony arytmetycznie z dwukrotnie większą dokładnością wyniku (np. Precyzja poczwórna, jeśli wynik końcowy ma być dokładny do pełnej podwójnej precyzji). Może to mieć postać połączonej operacji mnożenia i dodawania .

Aby to zilustrować, rozważ następujące równanie kwadratowe, zaadaptowane z Kahana (2004):

To równanie ma i korzenie

Jednak po obliczeniu za pomocą arytmetyki podwójnej precyzji IEEE 754 odpowiadającej 15 do 17 cyfr znaczących dokładności, jest zaokrąglany do 0,0, a obliczone pierwiastki są

które są fałszywe po ósmej cyfrze znaczącej. Dzieje się tak pomimo faktu, że na pozór wydaje się, że do rozwiązania problemu potrzeba tylko 11 znaczących cyfr dokładności.

Inne przykłady

  • Funkcja expm1 oblicza wykładniczy minus 1 . Dla małej X , exp ( x ) - 1 spowoduje utratę wagi podczas odejmowania; użycie specjalnie zaprojektowanej funkcji pomaga rozwiązać problem.

Zobacz też

Bibliografia