LICZBY ZMIENNOPRZECINKOWE

Podobne dokumenty
LICZBY ZMIENNOPRZECINKOWE

Podstawy Informatyki

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 5 Liczby w komputerze

Kod IEEE754. IEEE754 (1985) - norma dotycząca zapisu binarnego liczb zmiennopozycyjnych (pojedynczej precyzji) Liczbę binarną o postaci

Liczby rzeczywiste są reprezentowane w komputerze przez liczby zmiennopozycyjne. Liczbę k można przedstawid w postaci:

Przedmiot: Urządzenia techniki komputerowej Nauczyciel: Mirosław Ruciński

Arytmetyka binarna - wykład 6

ARCHITEKRURA KOMPUTERÓW Kodowanie liczb ze znakiem

Wprowadzenie do architektury komputerów systemy liczbowe, operacje arytmetyczne i logiczne

ARYTMETYKA BINARNA. Dziesiątkowy system pozycyjny nie jest jedynym sposobem kodowania liczb z jakim mamy na co dzień do czynienia.

Zestaw 3. - Zapis liczb binarnych ze znakiem 1

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015

Pracownia Komputerowa wykład VI

Technologie Informacyjne Wykład 4

Wielkości liczbowe. Wykład z Podstaw Informatyki dla I roku BO. Piotr Mika

Adam Korzeniewski p Katedra Systemów Multimedialnych

Teoretyczne Podstawy Informatyki

Reprezentacja stałoprzecinkowa. Reprezentacja zmiennoprzecinkowa zapis zmiennoprzecinkowy liczby rzeczywistej

Adam Korzeniewski p Katedra Systemów Multimedialnych

ARCHITEKTURA KOMPUTERÓW Liczby zmiennoprzecinkowe

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

Pozycyjny system liczbowy

Wstęp do programowania. Reprezentacje liczb. Liczby naturalne, całkowite i rzeczywiste w układzie binarnym

Wielkości liczbowe. Wykład z Podstaw Informatyki. Piotr Mika

Zapis liczb binarnych ze znakiem

Naturalny kod binarny (NKB)

Systemy liczbowe. 1. Przedstawić w postaci sumy wag poszczególnych cyfr liczbę rzeczywistą R = (10).

Met Me ody numer yczne Wykład ykład Dr inż. Mic hał ha Łan Łan zon Instyt Ins ut Elektr Elektr echn iki echn i Elektrot Elektr echn olo echn

System liczbowy jest zbiorem reguł określających jednolity sposób zapisu i nazewnictwa liczb.

Podstawy Informatyki

Pracownia Komputerowa wyk ad VI

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 2 WSTĘP DO INFORMATYKI

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Zasady arytmetyki stałoprzecinkowej oraz operacji arytmetycznych w formatach Q

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

Technologie Informacyjne

Systemy zapisu liczb.

Zwykle liczby rzeczywiste przedstawia się w notacji naukowej :

Kod U2 Opracował: Andrzej Nowak

RODZAJE INFORMACJI. Informacje analogowe. Informacje cyfrowe. U(t) U(t) Umax. Umax. R=(0,Umax) nieskończony zbiór możliwych wartości. Umax.

MNOŻENIE W SYSTEMACH UZUPEŁNIENIOWYCH PEŁNYCH (algorytm uniwersalny)

ZADANIE 1. Rozwiązanie:

Architektura komputerów

Dane, informacja, programy. Kodowanie danych, kompresja stratna i bezstratna

Podstawy Informatyki. Metalurgia, I rok. Wykład 3 Liczby w komputerze

Kod znak-moduł. Wartość liczby wynosi. Reprezentacja liczb w kodzie ZM w 8-bitowym formacie:

Kod uzupełnień do dwóch jest najczęściej stosowanym systemem zapisu liczb ujemnych wśród systemów binarnych.

Metoda znak-moduł (ZM)

Arytmetyka stało i zmiennoprzecinkowa

Mikroinformatyka. Koprocesory arytmetyczne 8087, 80187, 80287, i387

Kurs ZDAJ MATURĘ Z MATEMATYKI MODUŁ 2 Teoria liczby rzeczywiste cz.2

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0,

BŁĘDY OBLICZEŃ NUMERYCZNYCH

Arytmetyka liczb binarnych

Kodowanie informacji. Kody liczbowe

DYDAKTYKA ZAGADNIENIA CYFROWE ZAGADNIENIA CYFROWE

Podstawy Informatyki. Wykład 2. Reprezentacja liczb w komputerze

Architektura komputerów

Luty 2001 Algorytmy (7) 2000/2001

Kodowanie liczb całkowitych w systemach komputerowych

Prefiksy binarne. kibibit (Kibit) mebibit (Mibit) gibibit (Gibit) tebibit (Tibit) pebibit (Pibit) exbibit (Eibit) zebibit (Zibit) yobibit (Yibit)

SYSTEMY LICZBOWE 275,538 =

INFORMATYKA. Zajęcia organizacyjne. Arytmetyka komputerowa.

1.1. Pozycyjne systemy liczbowe

Arytmetyka stałopozycyjna

DZIAŁANIA NA UŁAMKACH DZIESIĘTNYCH.

Operacje arytmetyczne

Liczby zmiennoprzecinkowe i błędy

Architektura komputerów Reprezentacja liczb. Kodowanie rozkazów.

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI

Informatyka 1. Wykład nr 5 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

SYSTEMY LICZBOWE. Zapis w systemie dziesiętnym

Architektura komputerów

Powtórzenie podstawowych zagadnień. związanych ze sprawnością rachunkową *

0 + 0 = 0, = 1, = 1, = 0.

Wprowadzenie do informatyki - ć wiczenia

Pracownia Komputerowa wykład V

Informatyka kodowanie liczb. dr hab. inż. Mikołaj Morzy

SYSTEMY LICZBOWE. SYSTEMY POZYCYJNE: dziesiętny (arabski): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 rzymski: I, II, III, V, C, M

4 Standardy reprezentacji znaków. 5 Przechowywanie danych w pamięci. 6 Literatura

Arytmetyka stało- i zmiennoprzecinkowa. 1. Informacje wstępne

Wprowadzenie do informatyki - ć wiczenia

Metody numeryczne. Janusz Szwabiński. nm_slides.tex Metody numeryczne Janusz Szwabiński 2/10/ :02 p.

Wprowadzenie do informatyki - ć wiczenia

Wprowadzenie do metod numerycznych. Krzysztof Patan

architektura komputerów w. 2

Metody numeryczne I. Janusz Szwabiński. Metody numeryczne I (C) 2004 Janusz Szwabiński p.1/61

Dane, informacja, programy. Kodowanie danych, kompresja stratna i bezstratna

Wstęp do informatyki- wykład 1 Systemy liczbowe

W jaki sposób użyć tych n bitów do reprezentacji liczb całkowitych

Stan wysoki (H) i stan niski (L)

REPREZENTACJA LICZBY, BŁĘDY, ALGORYTMY W OBLICZENIACH

Operatory AND, OR, NOT, XOR Opracował: Andrzej Nowak Bibliografia:

Cyfrowy zapis informacji

Pracownia Komputerowa wykład IV

1. Operacje logiczne A B A OR B

PRZELICZANIE JEDNOSTEK MIAR

Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego

Wstęp do Informatyki

Wstęp do informatyki- wykład 1 Systemy liczbowe

Transkrypt:

LICZBY ZMIENNOPRZECINKOWE Liczby zmiennoprzecinkowe są komputerową reprezentacją liczb rzeczywistych zapisanych w formie wykładniczej (naukowej). Aby uprościć arytmetykę na nich, przyjęto ograniczenia zakresu mantysy i eksponenty oraz wprowadzono inne założenia, które reguluje norma IEEE 754 (dla liczb zapisanych w kodzie dwójkowym). Liczbę zapisuje się jako ciąg zer i jedynek przyjmując umowny podział na pola : w jednostce zmiennoprzecinkowej S E M G R X/S znak wykładnik w kodzie spolaryzowanym ułamek bity specjalne podział liczby zmiennoprzecinkowej na pola S znak, jest zawsze jedno bitowy i ma wartość 0 jeśli liczba jest dodatnia lub 1 jeśli jest ujemna E wykładnik (inaczej: eksponent, cecha), ma długość zależną od długości całej liczby i kodowane jest w kodzie 2 k- 1-1 M moduł (inaczej mantysa) ułamka. Ma wartość z przedziału [1,2). Zapisuje się go bez poprzedzającej go jedynki z kropką (tzw. bit ukryty). Innymi słowy, zapisujemy jedynie część ułamkową modułu przyjmując, że zawsze (pomijając wyjątki, o których później) część całkowita wynosi 1. Bity specjalne występują jedynie w wewnętrznej reprezentacji liczy w jednostce zmiennoprzecinkowej i wykorzystywane są do zniwelowania efektu utraty dokładności przy wykonywaniu działań, przez zaokrąglenie. Zarówno liczba wejściowa jak i wyjściowa takiego układu nie posiada tych bitów. Oznacza to, że liczby 32/64/128 bitowe, w jednostce zmiennoprzecinkowej, po uzupełnieniu bitami specjalnymi, maja długość odpowiednio 35/67/131 bitów. Bity te są używane tylko dla pojedynczej operacji arytmetycznej po czym wykonywane jest zaokrąglenie. Mówiąc inaczej, w szeregu operacji arytmetycznych, po każdej pojedynczej operacji następuje zaokrąglenie i porzucenie bitów GRX (gdyż nie ma na nie miejsca poza jednostką zmiennoprzecinkową), G bit ochrony (guard) R bit zaokrąglenia (round) X bit obecności zer na wszystkich pozycjach mniej znaczących od R (sticky) rozmiar liczby wykładnik E moduł ułamka M nazwa 32 8 23 single 64 11 52 double 128 16 111 extended długości poszczególnych pól (w bitach) Wartość reprezentowaną przez liczbę określa się wg wzoru: x = S 1 M 2 E PRZYKŁADY: a) 0 0100 0100 111 1100 1010 0010 0111 1100 = 1,111110010100 01001111100 2 59 = 1 1,8168060 2 59 DŁUGOŚĆ: 32 bity s (1 bit) = 0 (liczba dodatnia) E (8 bit) = 0100 0100 = 68-127= -59 M = 1,111 1100 1010 0010 0111 1100 2 = 1,8168060 10 b) 1 0100 0100 111 1100 1010 0010 0111 1100 = 1,11111001010 001001111100 2 59 = 1 1,8168060 2 59 DŁUGOŚĆ: 32 bity s (1 bit) = 1 (liczba ujemna) E (8 bit) = 0100 0100 = 68-127= -59 M = 1,111 1100 1010 0010 0111 1100 2 = 1,8168060 10 c) 0 0111 1111 000 0000 0000 0000 0000 0000 = 1 1,0 2 0 = 1 DŁUGOŚĆ: 32 bity s (1 bit) = 0 (liczba dodatnia) E (8 bit) = 0111 1111 = 127-127 = 0 M = 1,000 0000 0000 0000 0000 0000 2 = 1,0 10

Przekodowanie liczb w systemie 2 k-1-1 na U2 TIPS & TRICKS czyli jak ułatwić sobie życie (czytaj: obliczenia) Po co? Ano dla tego, że kochamy U2, w nim wszystko jest proste i traktujemy ten kod prawie tak samo naturalnie jak zwykły dziesiętny. Co nam to ułatwi? Np. dzielenie przez dwa wykonywane przy pierwiastkowaniu. Więc do rzeczy... Przekodowanie liczby z zachowaniem znaku jest trudniejsze a nam zachowanie znaku nie jest potrzebne (jak dodamy/odejmiemy dwie liczby ujemne lub podzielimy liczbę ujemna a potem zmienimy znów znak to co do modułu utrzymamy ten sam wynik) więc będziemy przekodowywać ze zmianą znaku. Sprawa jest niezwykle banalna należy zanegować wszystkie bity poza najstarszym (najmniej znaczącym albo, jak kto woli, tym najbardziej na lewo). Oto przykład: NB 2 k-1-1 U2 (liczba przeciwna) k 10 10+127=137 10=10001001 11110110 U2=-10 10 8-25 -25+127=102 10=01100110 00011001 U2=25 10 8 0 0+127=127 10=01111111 00000000 U2=0 10 8 Zmiana znaku liczb w systemie 2 k-1-1: Jak zostało pokazane powyżej, negacja wszystkich bitów poza najstarszym zmienia liczbę na U2 o przeciwnym znaku. Operacja odwrotna również zmienia znak więc możemy wykonać następujący algorytm: przekodowanie liczby na U2 (negacja wszystkich bitów poza pierwszym) zmiana znaku (negacja wszystkich bitów i dodanie 1) przekodowanie na 2 k-1-1 (negacja wszystkich bitów poza pierwszym) Algorytm ten można jednak zoptymalizować. Pierwszy bit zanegowany jest raz a wszystkie pozostałe 3 krotnie. Podwójne zanegowanie nie daje żadnego rezultatu więc ostatecznie wszystkie bity są negowane tylko raz. Po przekodowaniu na U2 dodajemy jedynkę a później negujemy więc w ostatecznym rozrachunku jedynka ta jest odejmowana. Po uwzględnieniu tych faktów napisać można zoptymalizowany algorytm: zanegować wszystkie bity odjąć 1 od najmłodszego bitu Przykład: NB 2 k-1-1 zanegowana odjęte 1 k 10 10+127=137 10=10001001 01110110 01110101=117-127 = -10 10 8-25 -25+127=102 10=01100110 10011001 10011000=152-127 = 25 10 8 0 0+127=127 10=01111111 10000000 01111111=127-127 = 2 10 8 sposób 2: W systemie z obciążeniem wartość powiększona jest o liczbę O (będącą właśnie tym obciążeniem). W związku z tym nasza liczba x przedstawiona jest jako: E = x + O My chcemy znaleźć liczbę -x na podstawie danej nam liczby E i zapisać ją również w z obciążeniem. Szukana przez nas wartość powinna wynosić: -x + O = -(x + O) + 2O = -E + 2O = 2O E Wynika z tego, że aby zmienić znak liczby w kodzie z obciążeniem musimy ją odjąć od podwojonego obciążenia. Brzmi to trudniej niż jest w rzeczywistości. Dla liczb zmiennoprzecinkowych używamy obciążenia 2 k-1-1 (gdzie k to liczba bitów przypadających na eksponentę. Dla standardu pojedynczej precyzji (8 bit na wykłądnik) obciążenie O=127 10=01111111 2. Pomnożenie liczby przez 2 to przesunięcie jej o jedną pozycję w lewo więc 2O=11111110 2. I od tej liczby należy odjąć naszą wartość obciążoną by dostać jej wartość przeciwną.

KODY SPECJALNE Do pewnych specjalnych zastosowań zarezerwowano kody, w których wykładnik ma wartość minimalną (same zera) lub maksymalną (same jedynki). ZERO: Ponieważ przy założeniu, że mantysa jest znormalizowana (ma wartość z przedziału [1,2)), nie da się zapisać zera, na tą liczbę zarezerwowano specjalne kody, w których wszystkie bity poza pierwszym (S) są zerami. Wyróżnia się więc zero dodatnie (przykład dla liczb 32-bitowych): +0 = 0 0000 0000 000 0000 0000 0000 0000 0000 I zero ujemne (przykład dla liczb 32-bitowych): -0 = 1 0000 0000 000 0000 0000 0000 0000 0000 LICZBY BLISKIE ZERU: Kolejną konsekwencją normalizacji mantysy jest to, że nie da się zapisać liczb z przedziału (-2 Emin, +2 Emin ). Na potrzeby tych liczb, zarezerwowano kody, w których wykładnik jest równy zero ale mantysa jest różna od zera. W przypadku tych liczb, przyjmuje się, że mantysa ma bit ukryty równy 0 a nie 1 ( 0<M<1 ), wykładnik jest natomiast równy -2 k-1 +2. Przykłady: a) 0 0000 0000 111 1100 1010 0010 0111 1100 = 1 0,8168060 2 126 M = 0,111 1100 1010 0010 0111 1100 2 = 0,8168060 10 E (8 bit) = 0000 0000 = -126!! a) 1 0000 0000 111 1100 1010 0010 0111 1100 = 1 0,8168060 2 126 M = 0,111 1100 1010 0010 0111 1100 2 = 0,8168060 10 E (8 bit) = 0000 0000 = -126 NIE-LICZBY: Nie-liczby (NaN Not A Number) to kody reprezentujące wyniki niedające się zakodować w postaci liczby zmiennoprzecinkowej (np. wynik pierwiastkowania kwadratowego liczby ujemnej). Nie-liczbę kodujemy za pomocą liczby z wykładnikiem składającym się z samych jedynek i modułem różnym od zera. Wyróżnia się nie-liczby ciche (QNaN) wytwarzane sprzętowo oraz nie-liczby sygnalizacyjne (SNaN) generowane w programie obsługi wyjątku. Pierwsze charakteryzują się kodem ułamka zaczynającym się od 1xxxx a drugie kodem ułamka zaczynającym się od 0xxxx. Przykład kodów NaN (dla liczb 32-bitowych): 1 1111 1111 111 1111 1111 1111 1111 1111 (QNaN) 0 1111 1111 000 0000 0000 0000 0000 0001 (SNaN) NIESKOŃCZONOŚCI: Za pomocą liczb zmiennoprzecinkowych można również zakodować nieskończoności. Kodem zarezerwowanym dla tych wartości jest wykładnik składający się z samych jedynek i moduł z samych zer. Wyróżnia się minus nieskończoność (przykład dla kodu 32-bitowego): - = 1 1111 1111 000 0000 0000 0000 0000 0000 Plus nieskończoność (przykład dla kodu 32-bitowego): = 0 1111 1111 000 0000 0000 0000 0000 0000 PODSUMOWANIE: Wykładnik Mantysa Rodzaj liczby 00...00 00...00 zero 00...00 >0 Liczby bliskie zeru 11...11 1x...xx QNaN 11...11 0x...xx SNaN 11...11 00...00 Nieskończoność

DZIAŁANIA ARYTMETYCZNE NA LICZBACH ZMIENNOPRZECINKOWYCH Aby zrozumieć algorytmy działań arytmetycznych na liczbach zmiennoprzecinkowych należy wyobrazić je sobie w postaci wykładniczej: x=m*b E i odnieść się do praw arytmetyki działających na liczbach takiej postaci. DODAWANIE/ODEJMOWANIE: Z postaci liczb zmiennoprzecinkowych wynika lekka komplikacja przy operacjach dodawania/odejmowania. Aby je wykonać należy najpierw sprowadzi składniki do wspólnego wykładnika. Weźmy dwie liczby: x 1=M 1*B E1 x 2=M 2*B E2 Jako, że dodawanie jest przemienne (a odejmowanie to też dodawanie) przyjmijmy, że E1>E2. Wynik otrzymujemy wg wzoru: x 1 ± x 2 = M 1*B E1 ± M 2*B E2 = (M 1*B E1-E2 ± M 2)*B E2 Jak to zrobić na papierze: 1. Wyrównaj wykładniki: Wykładniki muszą być równe więc jeden ze składników sumy musi zostać przeskalowany. Oczywiście zależy nam na jak najmniejszej utracie dokładności więc powinniśmy tracić najmniej znaczące bity co implikuje przesuwanie mantysy w prawo co wymusza zrównanie wykładnika liczby mniejszej do większej. Przesunięcie mantysy o jeden bit w prawo równoważymy dodaniem 1 do wykładnika. Należy pamiętać o bicie ukrytym. 2. Dodaj mantysy: Skoro wykładniki są sobie równe możemy śmiało dodać mantysy, pamiętając o bicie ukrytym. 3. Znormalizuj wynik: Jak już wspomniałem może się okazać koniecznym znormalizowanie wyniku co będzie oznaczać przesunięcie mantysy w prawo (zwiększając wykładnik) bądź w lewo (zmniejszając wykładnik). 4. Zapisz wynik: Pamiętaj o ukryciu bitu. MNOŻENIE: W przeciwieństwie do dodawania/odejmowania mnożenie liczb w postaci zmiennoprzecinkowej jest banalne. Dla liczb: x 1=M 1*B E1 x 2=M 2*B E2 wynik mnożenia wynosi: x 1*x 2 = (M 1*B E1 ) * (M 2*B E2 ) = (M 1*M 2)*(B E1 *B E2 ) = (M 1*M 2)*B E1+E2 Jak to zrobić na papierze: 1. Wymnóż mantysy: Pamiętaj o bicie ukrytym. 2. Dodaj wykładniki: Wykładniki są zapisane w systemie spolaryzowanym co oznacza, że po ich zsumowaniu w wyniku otrzymamy podwójne obciążenie co wymaga korekcji (przez odjęcie obiciążenia). 3. Znormalizuj wynik: Przesunięcie mantysy w prawo (zwiększenie wykładnika) bądź w lewo (zmniejszenie wykładnika). 4. Zapisz wynik: Pamiętaj o ukryciu bitu. DZIELENIE: Dzielenie jest bardzo podobne do mnożenia: x 1/x 2 = (M 1*B E1 ) / (M 2*B E2 ) = (M 1/M 2)*(B E1 / B E2 ) = (M 1 / M 2)*B E1-E2 Jak to zrobić to na papierze: 1. Podziel mantysy: Pamiętaj o bicie ukrytym. 2. Odejmij wykładniki:

Wykładniki są zapisane w systemie spolaryzowanym co oznacza, że po ich odjęciu w wyniku otrzymamy wynik bez obciążenia co wymaga korekcji (przez dodanie obciążenia). 3. Znormalizuj wynik: Przesunięcie mantysy w prawo (zwiększenie wykładnika) bądź w lewo (zmniejszenie wykładnika). 4. Zapisz wynik: Pamiętaj o ukryciu bitu. OBLICZANIE ODWROTNOŚCI: Weźmy liczbę: x=m*b E jej odwrotność wynosi: 1/x = x -1 = (M*B E ) -1 = M -1 * B -E = 1/M * B -E Wynika z tego, że musimy osobno obliczyć odwrotność M i B E. Policzenie odwrotności ostatniej nie powinno stanowić problemu ponieważ polega jedynie na zmianie znaku wykładnika (opisane wcześniej). Trochę gorzej jest z odwrotnością mantysy. Aby obliczyć odwrotność mantysy wykorzystamy własność: 1 x 1 1 x dla x 0 Nasza mantysa jest liczbą w postaci 1+X (gdzie X to odczytana wprost wartość mantysy bez uwzględnienia ukrytej jedynki). Możemy więc rozpatrzyć z osobna dwa przypadki: X 0 : Jeśli tak to możemy bezpośrednio skorzystać z podanego wyżej prawa i zapisać M -1 =(1+X) =1 =1-X Obliczenie odwrotności możemy więc obliczyć w 3 krokach: negacja wszystkich bitów mantysy dodanie 1 na najmłodszym bicie normalizacja otrzymanej odwrotności (otrzymamy liczbę w postaci 0,xxxx więc trzeba przeskalować ją do postaci 1,xxxx jednocześnie odpowiednio zmniejszając wykładnik) X 1 W takim wypadku możemy mantysę zapisać w postaci 2-X zamiast 1+X, w związku z tym nasza liczba ma wartość: 2 X 2 E =2 1 X 2 E = 1 X 2 E 1 A jej odwrotność: [ 1 X 2 E 1 ] 1 E 1 = 1 X 2 Wynika z tego również, że liczba wynikowa będzie już znormalizowana. Dla nas oznacza to jednak, że aby obliczyć odwrotność mantysy musimy jedynie: podzielić mantysę przez 2 (przesunąć o jedną pozycję w prawo) uwzględniając bit ukryty dodaj 2 do mantysy i zaneguj ją w wyniku otrzymujemy liczbę postaci 1,xxxx więc nie potrzebna jest normalizacja. Poznane metody są przybliżonymi i będą sprawdzać się jedynie przy liczbach bliskich minimum i maksimum wartości mantysy. W innych nie możemy ich stosować ale na dziś nie chce mi się więcej pisać. OBLICZANIE PIERWIASTKA KWADRATOWEGO: Liczby zmiennoprzecinkowe mają za zadanie przechowywać liczby rzeczywiste więc pierwiastkowanie liczb ujemnych jest niewykonalne. W związku z tym, pierwszy bit (bit znaku S) powinien być równy 0. W przeciwnym wypadku wynikiem działania będzie zawsze NaN. Jego postać zależy od implementacji. W przypadku, gdy wykładnik jest parzysty sprawa jest prosta: M B 2n = M B n Gorzej jest gdy wykładnik nie jest parzysty ponieważ nie możemy łatwo spierwiastkować B E.. W takim wypadku możemy przeskalować mantysę zmniejszając lub zwiększając wykładnik o jeden (dzięki czemu będzie on parzysty). Lepszym pomysłem jest zmniejszenie wykładnika dzięki czemu w wyniku pierwiastkowania otrzymamy już liczbę znormalizowaną i nie trzeba będzie jej znów skalować. Przykłady: a) 0 0100 0100 111 1100 1010 0010 0111 1100 = 1,111 1100 1010 0010 0111 1100 2 59 Wartość liczby zmiennoprzecinkowej: E (8 bit) = 0100 0100 = 68-127= -59 M = 1,111 1100 1010 0010 0111 1100 Wykładnik jest nieparzysty co oznacza, że nie możemy z niego łatwo wyciągnąć pierwiastka więc przeskalujemy mantysę.

Zwiększy to wykładnik nie zmieniając wartości liczby więc możemy w ten sposób doprowadzić wykładnik do liczby parzystej. 1,111 110010100010 01111100 2 59 = 11,11110010 10001001111100 2 60 = = 11,1111001010001001111100 2 60 = 1,1111100 2 30 = = 00110 000111111000000 000000000000 Pierwiastek modułu przeskalowanego o 1 w prawo: 1 1, 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 1 1 1 1 1 = 1, 1 1 1 1 1 0 0-1 1 0 1 1-1 0 1 1 1 0 1 1-1 1 0 1 1 1 1 0 0 0-1 1 1 0 1 1 1 0 1 1 1 0-1 1 1 1 0 1 1 1 0 0 0 1 1 0-1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 0-1 1 1 1 1 1 0 1 0 0 1 1 0 1 1 1 1 0 0 1 1 1 nowy wykładnik: -30+127 = 97 = 0110 0001 2 0 0100 0101 111 1100 1010 0010 0111 1100 = 1,111 1100 1010 0010 0111 1100 2 58 b) Wartość liczby zmiennoprzecinkowej: E (8 bit) = 0100 0101 = 69-127= -58 M = 1,111 1100 1010 0010 0111 1100 Tutaj wykładnik jest parzysty więc po prostu wykonamy zwykłe pierwiastkowanie na module i na spotęgowanej podstawie systemu (czyli dwójce): 1,111 110010100010 01111100 2 58 = 1,011001 2 29 = = 00110 00100110010 00000000 00000000 Wynik jest już znormalizowany więc nie musimy go skalować. Pierwiastek z modułu: 1, 1 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 1 1 1 1 1 = 1, 0 1 1 0 0 1 1 0 1 1 1 1-1 0 0 1 0 1 1 0 1 0-1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0-1 0 1 1 0 0 0 1 1 0 1 0 0 0 1 1 nowy wykładnik: -29+127 = 98 = 0110 0010 2

ZAOKRĄGLENIA Zaokrąglenia jak wiadomo służą do zminimalizowania błędu jaki wytwarza się przy zmniejszeniu precyzji używanych liczb. W czym więc problem? Jedynie w ilości algorytmów używanych do zaokrąglania i nieścisłości w ich nazewnictwie. Zaokrąglenie przez obcięcie: Najprostsza metoda zaokrąglania polegająca na zignorowaniu najmniej znaczących bitów, odcięciu ich od liczby. Skutkiem tego zaokrąglenia jest zawsze zmniejszenie wartości liczby więc błąd metody jest ujemny. W IEEE 754 po prostu ignorujemy bity GRX. Zaokrąglenie do +nieskończoności: Również bardzo banalna metoda zawsze zaokrąglamy w górę, w stronę +nieskończoności. Oznacza to, że zawsze zwiększamy wartość liczby (w przypadku liczb ujemnych wartość bezwzględna się zmniejszy) a więc algorytm jest niesymetryczny. Zaokrąglenie do -nieskończoności: Metoda siostrzana do poprzedniej. Jedyna różnica polega na tym, że zawsze zaokrąglamy w dół, do mniejszej wartości liczby. Zaokrąglenie do najbliższej: Algorytm znany z podstawówki zaokrąglamy wynik do bliższej z dwóch znormalizowanych liczb (do większej lub mniejszej). Algorytm znacznie lepszy od poprzedniego ponieważ błąd metody może być zarówno dodatni jak i ujemny co przy ciągu operacji nie powoduje narastania błędu wyniku. W IEEE 754 jeśli G=1 to zaokrąglamy w górę (do liczby większej co do wartości bezwzględnej), jeśli G=0 to w dół. Niejasne jest jednak co robić gdy G=1, R=0, S=0, jednak najczęściej zaokrągla się wtedy w górę, jak to pokazano w poprzednim zdaniu. Zaokrąglanie symetryczne do parzystej: Algorytm podobny do poprzedniego jednak różni się zachowanie dla wartości w połowie. W przypadku zaokrąglenia do najbliższej za zwyczaj zaokrągla się w górę, rzadziej w dół, ale zawsze w tą samą stronę. Może to powodować błąd systematyczny. W przypadku zaokrąglania symetrycznego do parzystej, jeśli mamy wartość w połowie to zawsze zaokrąglamy do najbliższej, znormalizowanej liczby parzystej. Algorytm jest symetryczny więc zasada działa tak samo dla liczb ujemnych. W IEEE 754 oznacza to, że jeśli G=1, R=S=0 to zaokrąglamy do najbliższej liczby parzystej (tak by najmniej znaczący bit wyniku był równy 0). Uwaga, 0 jest uważane za parzyste. Zaokrąglanie symetryczne do nieparzystej: Algorytm o założeniach identycznych z poprzednim, z tą różnicą że zaokrąglamy do liczby nieparzystej. Algorytm raczej nie jest stosowany w praktycznych zastosowaniach ponieważ nigdy nie zaokrągla do 0.