Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Operacje zmiennoprzecinkowe

Podobne prezentacje


Prezentacja na temat: "Operacje zmiennoprzecinkowe"— 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 (-1)Z x 2e-127 x (1.m) Z wartość bitu znaku,  E .....wartość eksponenty,  M......mantysa liczby IEEE-754 (64-bity) Eksponenta (cecha)-11bitów Mantysa (podstawa) – 52bity Znak (mantysy) – 1-bit (-1)Z x 2e-1023 x (1.m)

3 Reprezentacja Mantysy
Liczby ujemne mantysy są reprezentowana w formacie: znak, moduł Dwie postacie mantysy: Znormalizowana 1,m1m2...mN Zawsze 1 na najbardziej znaczącej pozycji Jedynka nie jest kodowana (jest ukryta) Nieznormalizowana 0,m1m2...mN 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 bit 8 bits 23 bits 7/4     1       + 0   - 0 +nieskończon.   najmniejsza największa   -nieskonczon. NaN Chociaż jedna ‘1’ 2-128**

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

6 Znak References Eksponenta (e) Mantysa (m) Wartość 00..00 +0
00..00 +0 Dodatnia wartość nieznormalizowana 0.m × 2(-b+1) (b-przesunięcie eksponenty) XX..XX Dodatnia znormalizowana wartość 1.m × 2(e-b) 11..11 + nieskończoność SNaN (Signaling Not a Number) QNaN (Quiet Not a Number) 1 -0 Ujemna wartość nieznormalizowana -0.m× 2(-b+1) 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<<sizeof(Mantysa) | M; // dołożenie 1 na najstarszym bicie I<<= Eksponenta – 127 – sizeof(Mantysa) Uwaga wspomniana konwersja nie może być w prosty sposób wykonana dla formatu int 32 oraz float 64

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

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

13 Propagacja błędów Operacja dodawania
AR= A + eR; AR – rzeczywista wartość A, A- wartość otrzymana AR + BR = A + eA + B + eB (eA- błąd reprezentacji liczby AR) AR + BR = (A+B) + eA + eB eAB= (AR + BR) – (A+B) = eA + eB 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 eAB  AR+BR Operacja mnożenia AR * BR = (A + eA) * (B + eB)= A*B + A*eB + B*eA + (eA*eB – 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 AR= A << EA AR- liczba rzeczywista, A- liczba całkowita, EA- stałe przesunięcie dla wszystkich operacji. Przesunięcie EA nie jest uwzględniane podczas obliczeń a jedynie na samym początku i końcu obliczeń. Przykład: Y= A1*B1 + A2*B2 + C3*B3 Ai= Ari << EA; Bi= Bri << EB YR= Y >> (EA + EB) Wada: Konieczność pamiętania przesunięcia każdej operacji. Możliwość stosowania tylko wtedy kiedy przesunięcia EAi oraz EBi 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 110; 100 ale 101 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"

Podobne prezentacje


Reklamy Google