Łagodzenie błędów zmiennoprzecinkowych — Floating-point error mitigation

Łagodzenie błędów zmiennoprzecinkowych to minimalizacja błędów spowodowanych faktem, że liczb rzeczywistych nie można na ogół dokładnie przedstawić w stałej przestrzeni. Z definicji błąd zmiennoprzecinkowy nie może być wyeliminowany, aw najlepszym przypadku można nim zarządzać.

HM Sierra zauważył w swoim patencie z 1956 roku „Floating Decimal Point Arithmetic Control Means for Calculator”:

W związku z tym w pewnych warunkach większa część cyfr znaczących danych może znajdować się poza pojemnością rejestrów. Dlatego otrzymany wynik może mieć niewielkie znaczenie, jeśli nie całkowicie błędny.

Z1 , opracowany przez Zuse w 1936 roku, był to pierwszy komputer z arytmetyki zmiennoprzecinkowej i był tym samym podatny na błędy zmiennoprzecinkowej. Jednak wczesne komputery, których czas działania był mierzony 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. Dziś jednak, z superkomputerem wydajności systemu mierzona w petaflopów (10 15 ) operacji zmiennoprzecinkowych na sekundę, błąd zmiennoprzecinkowej jest poważnym problemem dla obliczeniowych rozwiązują problem. Ponadto istnieją dwa rodzaje błędów zmiennoprzecinkowych, anulowanie i zaokrąglanie. Anulowanie następuje po odjęciu dwóch podobnych liczb, a zaokrąglanie następuje, gdy nie można zapisać znaczących bitów i są one zaokrąglane lub obcinane. Błąd anulowania jest wykładniczy w stosunku do błędu zaokrąglania.

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łędu istnieje w celu analizy i minimalizacji błędu zaokrąglania liczb zmiennoprzecinkowych. Numeryczna analiza błędów generalnie nie uwzględnia błędu anulowania.

Arytmetyka Monte Carlo

Analiza błędów za pomocą arytmetyki Monte Carlo polega na wielokrotnym wstrzykiwaniu małych błędów do wartości danych algorytmu i określaniu względnego wpływu na wyniki.

Rozszerzenie precyzji

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

Arytmetyka o zmiennej długości

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

Użycie terminu błędu operacji zmiennoprzecinkowej

Algorytm zmiennoprzecinkowy znany jako TwoSum lub 2Sum , dzięki Knutha i Møllerowi , oraz jego prostszej, ale ograniczonej wersji FastTwoSum lub Fast2Sum (3 operacje zamiast 6), pozwala uzyskać (dokładny) termin błędu dla liczby zmiennoprzecinkowej dodatek zaokrąglony do najbliższego. Można również uzyskać (dokładny) składnik błędu mnożenia zmiennoprzecinkowego zaokrąglonego do najbliższej w 2 operacjach z FMA lub 17 operacjach, jeśli FMA nie jest dostępne (algorytmem ze względu na Dekkera). Te terminy błędu mogą być używane w algorytmach w celu poprawy dokładności końcowego wyniku, np. z rozwinięciami zmiennoprzecinkowymi lub algorytmami skompensowanymi .

Operacje dające wynik dodawania lub mnożenia zmiennoprzecinkowego zaokrąglony do najbliższego wraz ze składnikiem błędu (ale nieco różniące się od wyżej wymienionych 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 w zmniejszeniu błędu i lepszej kontroli zaokrąglania w niektórych aplikacjach, takich jak aplikacje finansowe .

Arytmetyka interwałowa

Arytmetyka przedziałowa to algorytm służący do zaokrąglania granic i błędów pomiaru. Wynikiem algorytmu są dwie liczby zmiennoprzecinkowe reprezentujące minimalne i maksymalne limity dla reprezentowanej wartości rzeczywistej.

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

Ocena arytmetycznego wyrażenia przedziałowego może zapewnić duży zakres wartości i może poważnie przeszacować granice prawdziwego błędu.

unums 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 wykładników i długości znaczącej, a informacja o błędzie jest przenoszona w pojedynczym bicie, ubit, reprezentującym możliwy błąd w najmniej znaczącym bicie znaczącej ( ULP ).

Skuteczność unums kwestionuje William Kahan .

Bibliografia