1 / 16

Architektura systemów komputerowych

Architektura systemów komputerowych. Wykład 3 Reprezentacja danych część 3. dr inż. Wojciech Bieniecki Instytut Matematyki i Informatyki http://wbieniec.kis.p.lodz.pl/pwsz. Zapis zmiennoprzecinkowy liczby rzeczywistej.

afram
Download Presentation

Architektura systemów komputerowych

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Architektura systemów komputerowych Wykład 3 Reprezentacja danych część 3 dr inż. Wojciech Bieniecki Instytut Matematyki i Informatyki http://wbieniec.kis.p.lodz.pl/pwsz

  2. Zapis zmiennoprzecinkowy liczby rzeczywistej Zapis bardzo dużych lub bardzo małych liczb w notacji pozycyjnej jest niewygodny, bo wymaga dużej ilości cyfr, np. dwanaście bilionów: 12 000 000000000 trzydzieści trylionów: 30 000 000000000000000 jedna bilionowa: 0,000 000 000 001 Znacznie prostsze jest przedstawienie powyższych liczb w postaci zmiennoprzecinkowej (ang. floating point numbers) 12000000000000 = 1,21013 30000000000000000000 = 3,01019 0,000000000001 = 1,010-12 Zapis zmiennoprzecinkowy to inaczej postać wykładnicza Jest użyteczny do wyrażania bardzo dużych liczb całkowitych lub małych ułamków, np.: Stałe fizyczne i chemiczne: 5.98*1024 kg masa Ziemi 6.02 *1023 mol-1 stała Avogadra (liczba cząstek materii w jednym molu substancji) Przelicznik jednostek 1 eV=1.6*10-19 J

  3. Zapis zmiennoprzecinkowy Liczba w zapisie zmiennoprzecinkowym składa się z: L = s×f×pc s – znak liczby ( 1 lub -1) f – mantysa (liczba ułamkowa), p – podstawa systemu, c – wykładnik potęgowy, czyli cecha (liczba całkowita) znaku liczby (ang. sign) mantysy (ang. fraction), czyli liczby, kto rej wartość bezwzględna jest mniejsza od wartości podstawy systemu pozycyjnego (dokładność ) podstawy podniesionej do pewnej potęgi zwanej wykładnikiem lub cechą (zakres) (ang. exponent) W ogólności położenie przecinka w mantysie nie jest ustalone i może się dowolnie zmieniać . Poniższe zapisy oznaczają tę samą liczbę : 325×1020 = 32,5×1021 = 3,25×1022 = 0,0325×1024 Zmiana położenia przecinka w mantysie wpływa na wartość cechy liczby Przesunięcie przecinka o 1 pozycję w lewo wymaga zwiększenia cechy o 1. Przesunięcie przecinka o 1 pozycję w prawo wymaga zmniejszenia cechy o 1.

  4. Znormalizowana liczba zmiennoprzecinkowa Ponieważ liczbę zmiennoprzecinkową można zapisywać w rożny sposób, przyjęto tzw. postać znormalizowaną . Znormalizowana liczba zmiennoprzecinkowa to taka, w której mantysa spełnia nierówność: p > | f | ≥1 Według tej definicji postacią znormalizowaną dla zapisów: 325×1020 = 32,5×1021 = 3,25×1022 = 0,0325×1024 jest zapis 3,25×1022 Jak zapisać liczbę, np. 1523,169(10)? zapisujemy mantysę przy wykładniku równym zero 1523,169×100(10) normalizujemy mantysę modyfikując wykładnik liczby 1,523169×103(10) dodatkowo może nastąpić obcięcie albo zaokrąglenie mantysy do zadanej ilości cyfr, np.: 1,5232×103(10) lub 1,5231×103(10)

  5. Zmiennoprzecinkowe liczby binarne • Liczby są kodowane w jednym słowie maszyny podzielonym na trzy części: • znak liczby (zwykle 1 bit) • kod mantysy liczby i jej znak • kod cechy liczby i jej znak. L = (-1)s × f × 2c-bias s – bit znaku ( 0 oznacza znak +, 1 znak - ) f – znormalizowana mantysa c – wykładnik potęgi, czyli informacja o ile miejsc przesuwamy przecinek; może być dodatnia lub ujemna; jest zapisana w kodzie binarnym przesuniętym (bias to środek przedziału). W praktycznych realizacjach zapisu liczb zmiennoprzecinkowych przyjmuje się ograniczony zakres na mantysę i cechę Reprezentacja jest znormalizowana, tzn. bity mantysy są przesunięte tak, aby pierwsze miejsce po przecinku zajmował pierwszy znak 1 ciągu mantysy. (0,5)10 ≤ |f| < 1

  6. Właściwości liczb znormalizowanych w formacie zmiennopozycyjnym wg IEEE P754

  7. Właściwości liczb znormalizowanych

  8. Stosowane typy danych w językach programowania

  9. Wartości specjalne liczb zmiennoprzecinkowych

  10. Sytuacje generujące wyjątki i wartości specjalne • Wyjątki (ang. exception) generujące QNaN zgodnie z IEEE 754 i Intel x87: • • niewłaściwa operacja arytmetyczna: • nadmiar/niedomiar stosu (stos poza R7 lub R0 – niebezpieczeństwo nadpisania danych), • operacja, której argumentem jest SNaN, • dodawanie lub odejmowanie typu (+∞)+(-∞), • mnożenie lub dzielenie: 0*∞, 0/0, ∞/∞, • reszta z dzielenia x/y, gdy x=∞ lub y=0, • pierwiastek kwadratowy z x, gdy x<0; • niemożność konwersji liczby z formatu zmiennopozycyjnego do całkowitego lub BCD, • niemożność porównania dwóch liczb, gdy co najmniej jedna z nich jest typu NaN, • • dzielenie przez zero (zwraca ∞), • • nadmiar numeryczny (liczba za duża), • • niedomiar numeryczny (liczba za mała), • • przybliżony rezultat operacji (wystąpiło zaokrąglenie lub obcięcie wyniku), • • zdenormalizowany operand (operand nie jest prawidłową liczbą typu single lub double).

  11. Arytmetyka liczb zmiennoprzecinkowych – tworzenie Zapisz liczbę -20.1(10) w formacie float 1. Znajdujemy zapis binarny modułu naszej liczby. Jeśli nie jest to możliwe, ograniczmy się do 23 bitów 20(10) = 0001 0100(2) 0.1(10) ≈ 0. 0001 1001 1001 1001 101(2) 20.1(10) ≈ 0001 0100.0001 1001 1001 1001 101(2) 2. Formę znormalizowaną osiągniemy poprzez zmianę wykładnika tak, by kropka binarna znajdowała się po prawej stronie jedynki na najbardziej znaczącej pozycji. 20.1(10) ≈ 1.0100 0001 1001 1001 1001 101(2)×24 3. Z tego wynika, że cecha E = 24

  12. Arytmetyka liczb zmiennoprzecinkowych - tworzenie 4. Wystarczy, że dla cech będziemy pamiętać to, co jest po przecinku F = 0100 0001 1001 10011001 101(2) 5. Dla formatu float wartość bias == 127, więc w kodzie przesuniętym będzie to 131 E = 4(10) = 10000011(bias127) 6. Cała liczba jest ujemna, więc pierwszy bit będzie 1 S = 1 Ostatecznie otrzymujemy

  13. Arytmetyka liczb zmiennoprzecinkowych - zakresy Zakres wykładnika dla n bitów: Wykładnik jest w kodzie U2, więc zakres obliczamy tak samo: Emin = − Bn-1+ 1 Emax = Bn-1 − 1 Zakres mantysy dla m bitów: Pamiętamy, że dla znormalizowanej postaci nie musimy pamiętać tego co jest przed kropką, bo zawsze jest to 1 Fmin= 1 Fmax =1 + (1 − 2-m) Dla przykładu float: m=23, n=8 Emin = − 128 Emax = 127 Fmin= 1 Fmax = 1.9999999403953552 Lmin = − 2127*1.9999999403953552 ≈ − 2128 ≈ 3.4*1038 Lmax = 2127*1.9999999403953552 ≈ 2128 Qmin = 2−128*1 ≈ 2.93*10−39

  14. Arytmetyka liczb zmiennoprzecinkowych - dodawanie Dla E1<E2 Przykład: wykonaj działanie 10.5 – 0.625 Wykonamy działanie: -0.625 + 10.5 |x1|=0.625 =0.101(2)=1.01(2) × 2-1 E1 = -1 = 11111111(2) F1 = 1.01 E2-E1=E2+(-E1) = 00000011 + 00000001= 00000100(U2) =4 x2=10.5 =1010.1(2)=1.0101(2) × 23 E2=3 = 00000011(2) F2=1.0101

  15. Arytmetyka liczb zmiennoprzecinkowych - dodawanie F2*2E2-E1= 1.0101 * 24 = 10101(2) F2*2E2-E1 -F1 = 10101.00(2)- 00001.01(2)= 10010.11(2). x1-x2 = 10011.11(2)*2-1=1001.111(2)= 9.875

  16. Arytmetyka liczb zmiennoprzecinkowych – mnożenie i dzielenie Wykonaj mnożenie 10.5 * 0.625 x1=0.625 = 1.01(2) × 2-1 x2= 1.0101(2) × 23 E1 = -1 = 11111111(2) F1 = 1.01 E2=3 = 00000011(2) F2=1.0101 F1*F2= 0.010101 +1.010100 =1.101001 E1+E2= 11111111 +00000011 =00000010 x1*x2=1.101001(2)*22=110.1001(2) = 6.5625

More Related