Liczby całkowite dodatnie BCN 0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 10
Liczby całkowite w kodzie (znak moduł) ZM
Zakres ZM min(ZM) = (-1) × (2n-2 + 2n-3 + ...22 + 21 + 20) = -2n-1 + 1 max(ZM) = 1 × (2n-2 + 2n-3 + ...22 + 21 + 20) = 2n-1 - 1 Dla n=4 od -7 do 7
Nadmiar i niedomiar w ZM
Wady ZM 1Koncepcyjnie prosty, lecz stwarza poważne problem problemy przy wykonywaniu operacji arytmetycznych 2Bit znakowy posiada zupełnie inne znaczenie od pozostałych bitów i nie uczestniczy bezpośrednio w operacjach arytmetycznych. 3 Niejednoznaczność!!! - wartość 0 posiada dwie reprezentacje kodowe: 0000 oraz 1000
kod U2 Kod U2 ułatwia realizację podstawowych operacji arytmetycznych, gdyż nie wymaga osobnego obsługiwania bitu znaku
01101011(U2) = 64 + 32 + 8 + 2 + 1 = 107(10). 11101011(U2) = (-27) + 64 + 32 + 8 + 2 + 1 = = -128 + 107 = (-21)(10).
procedura wyznaczania liczby przeciwnej w kodzie U2 Przejść do pierwszego od prawej strony bitu liczby. Do wyniku przepisać kolejne bity 0, aż do napotkania bitu o wartości 1, który również przepisać. Wszystkie pozostałe bity przepisać zmieniając ich wartość na przeciwną.
Przykład 10010100001000000(U2) 10010100001000000 01101011111000000
Przykład Wyznaczyć 8-mio bitowy kod U2 dla liczby dziesiętnej (-45)(10). Wyznaczamy kod binarny liczby przeciwnej: 45(10) = 101101(2) Kod uzupełniamy dwoma bitami 0 do wymaganej długości 8 bitów: 00101101. Wyznaczamy liczbę przeciwną : 00101101(U2) 11010011(U2). (-45)(10) = 11010011(U2)
Zakres n bitowych liczb U2 Największa liczba U2 powstaje dla bitu znaku równego 0, a pozostałych bitów równych 1. Ponieważ pozostałe bity przedstawiają wartość w naturalnym kodzie binarnym i jest ich n-1, to max(U2) = 2n-1 - 1 Najmniejszą wartość liczby U2 otrzymamy dla bitu znaku równego 1, a pozostałych bitów równych 0. W tym przypadku wartość liczby jest równa wadze pozycji znakowej, czyli min(U2) = (-2n-1)
Dodawanie liczb U2 Liczby U2 dodajemy ignorując przeniesienia poza bit znaku:
Nadmiar i niedomiar w kodzie U2 U2 oparty na 4 bitach: Max 23-1=7 Min-23=-8
Systemy z nadmiarem wartość binarna słowa kodowego jest równa kodowanej liczbie pomniejszonej o pewną stałą zwaną nadmiarem (ang. bias).
Przykład Dla kodu z nadmiarem bias = 63(10) oblicz wartość słowa kodowego 00011111(BIAS=63). 00011111(BIAS=63) = 24 + 23 + 22 + 21 + 20 - 63 00011111(BIAS=63) = 16 + 8 + 4 + 2 + 1 - 63 00011111(BIAS=63) = 31 - 63 00011111(BIAS=63) = (-32)(10).
Zakres kodowania z nadmiarem min(BIAS) = 0...0(BIAS) = - bias max(BIAS) = 1...1(BIAS) = 2n - 1 – bias Np. BIAS=2, n=3 Od -2 do 5
Dodawanie liczb z nadmiarem c1 (BIAS) = liczba1 + bias c2 (BIAS) = liczba2 + bias c1 (BIAS) + c2 (BIAS) = (liczba1 + liczba2) + 2*bias= = (liczba1 + liczba2) (BIAS)-bias
0011(BIAS=7) + 1010(BIAS=7) -4 3 bias -1
Zapis zmiennoprzecinkowy
Kod FP2 00100111(FP2) Mantysa +1+1/2+1/4=7/4 Cecha +2 Liczba +7/4*2^2=7
Zakres i precyzja Precyzja rośnie wraz ze wzrostem liczby bitów przeznaczonych na mantysę. Zakres rośnie wraz ze wzrostem liczby bitów przeznaczonych na wykładnik.
Arytmetyka liczb zmiennopozycyjnych mantysa sumy jest sumą mantys liczb wyjściowych po sprowadzeniu ich do wspólnej cechy (operacja ta nosi nazwę wyrównania cech liczb zmiennoprzecinkowych). Po wykonaniu operacji arytmetycznej mantysa wyniku jest sprowadzana do postaci znormalizowanej( z przedz. [1,2)) i zapamiętywana w kodzie liczby zmiennoprzecinkowej.
(0010 0100)(FP) + (0000 0110)(FP) c1 = 0010(U2) = 2, m1 = (01.00)(ZM) = 1 ( liczba 1x2^4=4) c2 = 0000(U2) = 0, m2 = (01.10)(ZM) = 11/2 (liczba 3/2x2^0 = 3/2) Wyrównujemy cechę (do c=0) c1 ’= 0000 m1‘= 0 100,00 Wynik normalizujemy m=0 1,01 (utracony ostatni bit) wynik (0010 0101)(FP) (=5) Zamiast 5,5
Dodawanie liczb zmiennopozycyjnych 1. Oblicz różnicę wykładników c1 - c2. Jeśli różnica ta jest różna od zera, to należy zrównać wykładnik c1 z c2. Bity mantysy m1przesuwamy o tyle miejsc, ile wynosi wartość bezwzględna różnicy wykładników. Kierunek przesunięcia określa znak różnicy - minus: przesunięcie w prawo, plus: przesunięcie w lewo. 2. Po zrównaniu wykładników mantysy dodajemy (lub odejmujemy) wg zasad obowiązujących dla liczb w kodzie znak-moduł. 3. Wynik dodawania (odejmowania) musi być znormalizowany
(1110 0110)(FP)* (0010 0100)(FP): c1 = 1110(U2) = -2, m1 = (0 1,10)(ZM) = 11/2 (liczba ma wartość dziesiętną 3/8) c2 = 0010(U2) = 2, m2 = (0 1,00)(ZM) = 1 (liczba ma wartość dziesiętną 4) Iloczyn mantys Suma cech (0000 0110)(FP)
Mnożenie liczb zmiennopozycyjnych Mantysa iloczynu jest równa iloczynowi mantys mnożonych liczb. Cecha iloczynu jest równa sumie cech mnożonych liczb. Po wykonaniu mnożenia wynik należy znormalizować.
Format IEEE 754 (32 bity cecha z nadmiarem bias=127, Mantysa ZM, znormalizowana (z [1,2)) pomijamy bit wiodący i podajemy tylko część ułamkową mantysy)
Precyzja arytmetyki
Rozważmy system kodowania w którym zarówno na cechę, jak i na mantysę, przeznaczono po dwa bity, Mantysa ZM, cecha BIAS=-1
Dla uproszczenia załóżmy x>0
Precyzja arytmetyki
Oszacowanie precyzji arytmetyki x = 1.0; while ( 1.0 + x > 1.0 ) x=x/2.0; end x 1.110223024625157e-016
Działania w arytmetyce fl x y liczby w arytmetyce fl fl(x,y) wynik działania w arytmetyce fl Precyzja arytmetyki
Jak dokładny może być dla danego zadania wynik policzony w arytmetyce fl? ciągła np. dodawanie: Realizacja algorytmu obliczania φ Zastąpienie danych liczbowych ich reprezentacjami Wykonanie operacji arytmetycznych i sprowadzenie wyniku do stosowanej reprezentacji! )
Niech A będzie pewnym algorytmem (w arytmetyce klasycznej czyli dokładnie) obliczania wyniku φ(d)=w Niech będą oszacowaniami błędu względnego reprezentacji danych i wyniku odpowiednio
Algorytm A nazywamy numerycznie poprawnym jeśli istnieją stałe Kd i Kw (wskaźniki kumulacji) takie, że dla dowolnych danych d przy dostatecznie silnej arytmetyce (duże t) istnieją dane takie, że (zaburzenie względne na poziomie ) oraz (zaburzenie wyniku na poziomie )
Algorytm A S=0 for k=1 to 3 S=S+ak*bk end Return S Rozważmy zaburzone dane:
Algorytm A S=0 for k=1 to n S=S+ak*bk end Return S Rozważmy zaburzone dane: W praktyce można żałożyć, że nie przekracza
W praktyce algorytm uznajemy za numerycznie poprawny, gdy wskaźnik kumulacji Jest na poziomie ilości działań potrzebnych do rozwiązania zadania Algorytm wyznaczania iloczynu skalarnego jest więc numerycznie poprawny