Łagodzenie błędów zmiennoprzecinkowych

Łagodzenie błędów zmiennoprzecinkowych to minimalizacja błędów spowodowanych faktem, że liczb rzeczywistych nie można na ogół dokładnie przedstawić w ustalonej przestrzeni. Z definicji zmiennoprzecinkowych nie można wyeliminować, aw najlepszym razie można nimi zarządzać.

Huberto M. Sierra zauważył w swoim patencie z 1956 r. „Środki kontroli arytmetycznej zmiennoprzecinkowej dla kalkulatora”:

Zatem w pewnych warunkach większa część znaczących cyfr danych może leżeć poza pojemnością rejestrów. Dlatego uzyskany wynik może mieć niewielkie znaczenie, jeśli nie jest całkowicie błędny.

Z1 , opracowany przez Konrada Zuse w 1936 roku, był pierwszym komputerem z arytmetyką zmiennoprzecinkową, przez co był podatny na błędy zmiennoprzecinkowe . Jednak wczesne komputery, których czas operacji mierzony był w milisekundach, nie były w stanie rozwiązać dużych, złożonych problemów i dlatego rzadko były nękane błędami zmiennoprzecinkowymi. Jednak dzisiaj, gdy wydajność systemu superkomputera jest mierzona w petaflopach , błąd zmiennoprzecinkowy jest głównym problemem dla osób zajmujących się rozwiązywaniem problemów obliczeniowych.

W poniższych sekcjach opisano mocne i słabe strony różnych sposobów łagodzenia błędów zmiennoprzecinkowych.

Numeryczna analiza błędów

Chociaż nie jest to główny cel analizy numerycznej , numeryczna analiza błędów istnieje w celu analizy i minimalizacji błędu zaokrąglania liczb zmiennoprzecinkowych.

Arytmetyka Monte Carlo

Analiza błędów za pomocą arytmetyki Monte Carlo jest realizowana poprzez wielokrotne wprowadzanie małych błędów do wartości danych algorytmu i określanie względnego wpływu na wyniki.

Rozszerzenie precyzji

Rozszerzenie precyzji polega na wykorzystaniu większych reprezentacji wartości rzeczywistych niż pierwotnie rozważane. Standard IEEE 754 definiuje precyzję jako liczbę cyfr dostępnych do reprezentacji liczb rzeczywistych. Język programowania może obejmować pojedynczą precyzję (32 bity), podwójną precyzję (64 bity) i poczwórną precyzję (128 bitów). Podczas gdy rozszerzenie precyzji sprawia, że ​​skutki błędu są mniej prawdopodobne lub mniej ważne, prawdziwa dokładność wyników jest nadal nieznana.

Arytmetyka zmiennej długości

Arytmetyka zmiennej długości przedstawia liczby jako ciąg cyfr o zmiennej długości ograniczonej jedynie dostępną pamięcią. Operacje arytmetyczne o zmiennej długości są znacznie wolniejsze niż instrukcje zmiennoprzecinkowe w formacie o stałej długości. Gdy wysoka wydajność nie jest wymagana, ale wysoka precyzja, arytmetyka o zmiennej długości może okazać się przydatna, chociaż rzeczywista dokładność wyniku może nie być znana.

Użycie składnika błędu operacji zmiennoprzecinkowej

Algorytm zmiennoprzecinkowy znany jako TwoSum lub 2Sum , ze względu na Knutha i Møllera, oraz jego prostsza, ale ograniczona wersja FastTwoSum lub Fast2Sum (3 operacje zamiast 6), pozwalają uzyskać (dokładny) termin błędu zmiennoprzecinkowego dodawanie zaokrąglone do najbliższej. Można również uzyskać (dokładny) składnik błędu mnożenia zmiennoprzecinkowego zaokrąglony do najbliższego w 2 operacjach z połączonym mnożeniem -dodawaniem (FMA) lub 17 operacjami, jeśli FMA nie jest dostępny (z algorytmem dzięki Dekkerowi). Te składniki błędów mogą być używane w algorytmach w celu poprawy dokładności wyniku końcowego, np. z rozwinięciami zmiennoprzecinkowymi lub algorytmami kompensowanymi.

Operacje dające wynik dodawania lub mnożenia zmiennoprzecinkowego zaokrąglony do najbliższego wraz ze składnikiem błędu (ale nieco różniący się od wspomnianych wyżej algorytmów) zostały ustandaryzowane i zalecane w standardzie IEEE 754-2019.

Wybór innej podstawy

Zmiana podstawy, w szczególności z binarnej na dziesiętną, może pomóc zmniejszyć błąd i lepiej kontrolować zaokrąglanie w niektórych aplikacjach, takich jak aplikacje finansowe .

Arytmetyka przedziałów

Arytmetyka przedziałów jest techniką matematyczną stosowaną do wyznaczania granic błędów zaokrągleń i błędów pomiaru w obliczeniach matematycznych . Wartości to przedziały, które można przedstawić na różne sposoby, na przykład:

  • inf-sup: dolna i górna granica prawdziwej wartości;
  • mid-rad: przybliżenie i granica błędu (nazywana punktem środkowym i promieniem przedziału);
  • triplex: przybliżenie, dolna granica i górna granica błędu.

„Zamiast używać pojedynczej liczby zmiennoprzecinkowej jako przybliżenia wartości zmiennej rzeczywistej w badanym modelu matematycznym, arytmetyka przedziałowa uznaje ograniczoną precyzję poprzez powiązanie ze zmienną zestawu liczb rzeczywistych jako możliwych wartości. Dla ułatwienia przechowywania i obliczeń , te zbiory są ograniczone do przedziałów”.

Ocena wyrażenia arytmetycznego przedziału może dostarczyć dużego zakresu wartości i może poważnie przeszacować rzeczywiste granice błędu.

unum Gustafsona

Unums („Liczby uniwersalne”) są rozszerzeniem arytmetyki o zmiennej długości zaproponowanej przez Johna Gustafsona . Unums mają pola o zmiennej długości dla długości wykładników i znaczących , a informacja o błędzie jest przenoszona w jednym bicie, ubit, reprezentującym możliwy błąd w najmniej znaczącym bicie znaczącej ( ULP ).

Skuteczność unum kwestionuje William Kahan .

Ograniczony zmiennoprzecinkowy

Ograniczony zmiennoprzecinkowy to metoda zaproponowana i opatentowana przez Alana Jergensena. Struktura danych obejmuje standardową IEEE 754 , a także informacje o błędzie między prawdziwą wartością rzeczywistą reprezentowaną a wartością przechowywaną przez reprezentację zmiennoprzecinkową.

Ograniczona liczba zmiennoprzecinkowa była krytykowana jako pochodna prac Gustafsona nad liczbami i arytmetyką przedziałów.