Arytmetyka nasyceniowa

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj
Dodawanie dwóch obrazów (A, B) z zastosowaniem arytmetyki nasyceniowej (górny obrazek) oraz artymetyki modulo (dolny obrazek)

Arytmetyka nasyceniowa (ang. saturated arithmetic) — sposób przeprowadzania obliczeń na całkowitych liczbach binarnych, w której reakcją na przekroczenie zakresu liczb jest przypisanie wynikowi górnej bądź dolnej granicy zakresu. Arytmetyka ta znajduje zastosowanie m.in. w DSP (m.in. przetwarzanie dźwięku i obrazu) — upraszcza programy i przyspiesza wiele algorytmów.

Dla porównania arytmetyka powszechnie stosowana w komputerach to tzw. arytmetyka modularna (ang. wraparound), tj. z wyniku brana jest zawsze określona liczba najmłodszych bitów, zaś fakt przekroczenia zakresu jest np. sygnalizowany przez procesor poprzez ustawienie określonych bitów w rejestrze flag — wykrywanie tej sytuacji i korygowanie wyników spoczywa na programie.

Obliczenia z nasyceniem są dostępne w popularnych procesorach posiadających rozszerzenia MMX i SSE.


Nasycanie wyniku przebiega według poniższego schematu:

wynik pośredni := rezultat pewnego działania na
                  liczbach n-bitowych przechowujących
                  wartości z zakresu [min, max];
                  wynik pośredni przechowywany jest
                  na większej niż n liczbie bitów
 
if (wynik pośredni > max) then
   wynik := max
else
if (wynik pośredni < min) then
   wynik := min
else
   wynik := wynik pośredni

Np. bajt bez znaku może przechowywać liczby z zakresu od 0 do 255 i jeśli do bajta o wartości 230 zostanie dodane 100, to wynikiem będzie 255, ponieważ pośredni wynik 330 przekracza dopuszczalny zakres.