Arytmetyka nasyceniowa
Z Wikipedii
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 wg 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 bajtu o wartości 230 zostanie dodane 100, to wynikiem będzie 255, ponieważ pośredni wynik 330 przekracza dopuszczalny zakres.