Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Operacje zmiennoprzecinkowe Ernest Jamro Kat. Elektroniki AGH.

Podobne prezentacje


Prezentacja na temat: "Operacje zmiennoprzecinkowe Ernest Jamro Kat. Elektroniki AGH."— Zapis prezentacji:

1 Operacje zmiennoprzecinkowe Ernest Jamro Kat. Elektroniki AGH

2 Reprezentacja liczby IEEE-754 (32-bity) Eksponenta (cecha)-8bitów Mantysa (podstawa) – 23bity Znak (mantysy) – 1-bit IEEE-754 (64-bity) Eksponenta (cecha)-11bitów Mantysa (podstawa) – 52bity Znak (mantysy) – 1-bit (-1) Z x 2 e-127 x (1.m) Z wartość bitu znaku, E.....wartość eksponenty, M......mantysa liczby (-1) Z x 2 e-1023 x (1.m)

3 Reprezentacja Mantysy 1,m 1 m 2...m N Zawsze 1 na najbardziej znaczącej pozycji Jedynka nie jest kodowana (jest ukryta) Liczby ujemne mantysy są reprezentowana w formacie: znak, moduł Dwie postacie mantysy: Znormalizowana Nieznormalizowana 0,m 1 m 2...m N Zero ukryte – domniema się zero dla eksponenty = wtedy format liczby (-1) Z x 2 -b+1 x 0.m

4 Przykładowy, reprezentacja (32-bity) znak eksponenta mantysa 1 bit8 bits23 bits 7/ nieskończon najmniejsza największa nieskonczon NaN Chociaż jedna **

5 Operacje specjalne OperationResult n ÷ ± 0 ± × ± ± ± ÷ 0± (- + - )+ (- ) ±0 ÷ ±0NaN NaN ± ÷ ± NaN ± × 0 NaN NaN – not a number

6 Znak Eksponenta (e)Mantysa (m)Wartość Dodatnia wartość nieznormalizowana 0.m × 2 (-b+1) (b-przesunięcie eksponenty) XX..XX Dodatnia znormalizowana wartość 1.m × 2 (e-b) nieskończoność SNaN (Signaling Not a Number) QNaN (Quiet Not a Number) Ujemna wartość nieznormalizowana -0.m× 2 (-b+1) XX..XX Wartość negatywna znormalizowana -1.m × 2 (e-b) nieskończoność SNaN QNaN References

7 Konwersja Integer->Float Dokonać konwersji do formatu znak - moduł Znaleźć najstarszą 1 – w ten sposób określamy eksponentę Dokonać przesunięcia tak aby najstarsza 1 była na pozycji pierwszego bitu po kropce– w ten sposób określamy mantysę Algorytm sekwencyjny (wolny) - język C I- liczba wejściowa dodatnia (tylko moduł) if (I==0) { exp= 0; mantysa= 0; } // liczba zero int sh= 0; // przesunięcie while ( I & 0x == 0) // sprawdź najstarszy bit { sh++; I<<=1;} exp= sh; // eksponenta mantysa= I <<1; // mantysa zaczyna się od najstarszego bitu (pierwsza 1 jest odrzucona)

8 Konwersja Integer->Float Algorytm szybki (zastosowany w sprzęcie) I- liczba wejściowa dodatnia (tylko moduł) int sh= 0; // przesunięcie if (I & 0xFFFF0000 == 0) // sprawdź najstarsze 16-bitów { I<<= 16; sh|= 0x10; } // ewentualnie przesuń o 16 bitów if (I & 0xFF == 0) // sprawdź najstarsze 8 bitów { I<<= 8; sh|= 8; } // ewentualnie przesuń o 8 bitów if (I & 0xF == 0) // sprawdź najstarsze 4 bitów { I<<= 4; sh|= 4; } // ewentualnie przesuń o 4 bity if (I & 0xC == 0) // sprawdź najstarsze 2 bitów { I<<= 2; sh|= 2; } // ewentualnie przesuń o 2 bitów if (I & 0x == 0) // sprawdź najstarszy bit { I<<= 1; sh|= 1; } // ewentualnie przesuń o 8 bitów if (I & 0x == 0) { exp= 0; mantysa= 0; } // liczba zero (sprawdź tylko najstarszy bit) else { mantysa= I<<1; exp= sh; }

9 Sprzętowa konwersja I 2 F

10 Konwersja Float -> Int I= (1<

11 Operacja mnożenia i dzielenia Mnożenie: Y= A*B= ((-1) Sa * M A *2 Ea-b ) * ((-1) Sb * M B * 2 Eb-b ) Y= (-1) Sa+Sb * M A *M B * 2 Ea+Eb–2b (b – przesuniecie eksponenty) S Y = S A xor S B M Y = M A * M B (należy pamiętać o wiodących jedynkach. W niektórych przypadkach M Y >=2.0 co wymaga dodatkowego przesunięcia o jeden bit w prawo) E Y = E A + E B – b (+1 – w przypadku dodatkowej normalizacji) Dzielenie Y= A/B = ((-1) Sa * M A *2 Ea-b ) / ((-1) Sb * M B * 2 Eb-b Y= (-1) Sa+Sb * (M A /M B ) * 2 Ea – Eb S Y = S A xor S B M Y = M A / M B – uwaga mantysa wymaga normalizacji (przesunięcia w lewo o k- bitów) E Y = E A – E B + b – k (k przesunięcia mantysy o k-bitów podczas normalizacji)

12 Operacja dodawania Założenie E A >= E B (w przeciwnym wypadku zamienić argumenty) Y= A+B= ((-1) Sa * M A *2 Ea-b ) + ((-1) Sb * M B * 2 Eb-b Y= (-1) Sa * (M A + ((-1) Sb+Sa M B )>>(E A -E B ) ) * 2 Ea-b Wykonywanie operacje: Porównanie E A i E B i ewentualne zamienienie argumentów Przesunięcia M B o (E A -E B ) bitów w prawo Wykonanie operacji dodawania (lub odejmowania jeżeli S A S B ). Normalizacja wyniku Operacja odejmowania: Wystarczy zanegować znak S B Zobacz:

13 Propagacja błędów Operacja dodawania A R = A + e R ; A R – rzeczywista wartość A, A- wartość otrzymana A R + B R = A + e A + B + e B (e A - błąd reprezentacji liczby A R ) A R + B R = (A+B) + e A + e B e AB = (A R + B R ) – (A+B) = e A + e B propagacja błędu bezwzględnego, błąd ma szczególne znaczenie w przypadku kiedy (A+B) dużo mniejsze od A i B. Najgorszy przypadek wtedy kiedy A -B wtedy możliwe jest że e AB A R +B R Operacja mnożenia A R * B R = (A + e A ) * (B + e B )= A*B + A*e B + B*e A + (e A *e B – można pominąć) Następuje propagacja i sumowanie błędów (szczególne znaczenie ma błąd reprezentacji liczby mniejszej), natomiast nie następuje zwielokrotnienie błędu jak to może mieć miejsce w przypadku operacji dodawania

14 Zalety i wady reprezentacji zmiennoprzecinkowej Operacje zmiennoprzecinkowe są zalecane tam gdzie wartości liczb mają bardzo różne wielkości (różne eksponenty). Część znaczących bitów reprezentacji zmiennoprzecinkowej jest tracona na eksponentę, np. dla 32-bitowej reprezentacji jest to 8-bitów. Dlatego jeżeli liczby wejściowe nie różnią się o więcej niż o 8 bitów w eksponencie zaleca się stosować reprezentację stałoprzecinkową, w której każda liczba jest reprezentowana na 32- bitach. Zaletą liczb zmiennoprzecinkowych jest to, że błąd względny reprezentacji jest stały. Wada – operacje zmiennoprzecinkowe są bardziej skomplikowane i przez to zajmują więcej zasobów i są z reguły wolniej wykonywane. Ma to szczególne znaczenie w przypadku operacji dodawania.

15 Operacje stałoprzecinkowe Bardzo często nie jest konieczne stosowanie operacji zmiennoprzecinkowych – można je zastąpić operacjami stałoprzecinkowymi czyli pośrednio operacjami na liczbach całkowitych Często wynik operacji stałoprzecinkowych jest szybszy i dokładniejszy od wyniku operacji zmiennoprzecinkowych ponieważ nie jest tracona informacja na eksponentę Reprezentacja stałoprzecinkowa A R = A << E A A R - liczba rzeczywista, A- liczba całkowita, E A - stałe przesunięcie dla wszystkich operacji. Przesunięcie E A nie jest uwzględniane podczas obliczeń a jedynie na samym początku i końcu obliczeń. Przykład: Y= A 1 *B 1 + A 2 *B 2 + C 3 *B 3 A i = A ri << E A ; B i = B ri << E B Y R = Y >> (E A + E B ) Wada: Konieczność pamiętania przesunięcia każdej operacji. Możliwość stosowania tylko wtedy kiedy przesunięcia E Ai oraz E Bi są podobnej wartość (nie różnią się o więcej niż około 10 bitów)

16 Filtr w IIR Matlabie

17 Rounding Modes Sets the mode the filter uses to quantize numeric values when the values lie between representable values for the data format (word and fraction lengths). ceil - Round toward positive infinity. convergent - Round to the closest representable integer. Ties round to the nearest even stored integer. This is the least biased of the methods available in this software. E.g ; ale round - Round toward nearest. Ties round toward negative infinity for negative numbers, and toward positive infinity for positive numbers. zero/fix - Round toward zero. floor - Round toward negative infinity. nearest - Round toward nearest. Ties round toward positive infinity.


Pobierz ppt "Operacje zmiennoprzecinkowe Ernest Jamro Kat. Elektroniki AGH."

Podobne prezentacje


Reklamy Google