Zwykle liczby rzeczywiste przedstawia się w notacji naukowej :

Podobne dokumenty
Podstawy Informatyki

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

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

Arytmetyka stało i zmiennoprzecinkowa

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

Liczby zmiennoprzecinkowe i błędy

Pracownia Komputerowa wykład VI

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

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

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

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

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

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

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

LICZBY ZMIENNOPRZECINKOWE

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

Adam Korzeniewski p Katedra Systemów Multimedialnych

Adam Korzeniewski p Katedra Systemów Multimedialnych

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

Pracownia Komputerowa wyk ad VI

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

Architektura komputerów

Technologie Informacyjne

Reprezentacja stałoprzecinkowa. Reprezentacja zmiennoprzecinkowa zapis zmiennoprzecinkowy liczby rzeczywistej

Dokładność obliczeń numerycznych

Technologie Informacyjne Wykład 4

Dodatek do Wykładu 01: Kodowanie liczb w komputerze

Pracownia Komputerowa wykład IV

Wprowadzenie do metod numerycznych. Krzysztof Patan

Teoretyczne Podstawy Informatyki

Zestaw 3. - Zapis liczb binarnych ze znakiem 1

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

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

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

Mikroinformatyka. Koprocesory arytmetyczne 8087, 80187, 80287, i387

Arytmetyka binarna - wykład 6

Operacje arytmetyczne

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

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

Kod U2 Opracował: Andrzej Nowak

Pracownia komputerowa. Dariusz Wardecki, wyk. VI

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

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

BŁĘDY OBLICZEŃ NUMERYCZNYCH

Wprowadzenie do informatyki ćwiczenia

Naturalny kod binarny (NKB)

Pracownia Komputerowa wyk ad IV

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

ARCHITEKTURA KOMPUTERÓW Liczby zmiennoprzecinkowe

Obliczenia Naukowe. O arytmetyce komputerów, Czyli jak nie dać się zaskoczyć. Bartek Wilczyński 29.

Podstawy Informatyki

REPREZENTACJA LICZBY, BŁĘDY, ALGORYTMY W OBLICZENIACH

EMN. dr Wojtek Palubicki

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

Arytmetyka liczb binarnych

BŁĘDY PRZETWARZANIA NUMERYCZNEGO

Systemy zapisu liczb.

Języki i metodyka programowania. Reprezentacja danych w systemach komputerowych

Metody numeryczne II. Reprezentacja liczb

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

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

METODY NUMERYCZNE. Po co wprowadzamy liczby w formacie zmiennoprzecinkowym (floating point)?

Pozycyjny system liczbowy

1. Operacje logiczne A B A OR B

architektura komputerów w. 2

DYDAKTYKA ZAGADNIENIA CYFROWE ZAGADNIENIA CYFROWE

Metody numeryczne. Postać zmiennoprzecinkowa liczby. dr Artur Woike. Arytmetyka zmiennoprzecinkowa. Uwarunkowanie zadania.

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

LICZBY ZMIENNOPRZECINKOWE

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

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

Stan wysoki (H) i stan niski (L)

Architektura komputerów

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

ARCHITEKRURA KOMPUTERÓW Kodowanie liczb ze znakiem

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

Układy arytmetyczne. Joanna Ledzińska III rok EiT AGH 2011

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

Architektura komputerów

Wprowadzenie do informatyki - ć wiczenia

Operacje arytmetyczne w systemie dwójkowym

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

Architektura komputerów

METODY NUMERYCZNE. Wykład 2. Analiza błędów w metodach numerycznych. Met.Numer. wykład 2 1

INFORMATYKA. Zajęcia organizacyjne. Arytmetyka komputerowa.

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

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

Arytmetyka stałopozycyjna

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

Technologie Informatyczne Wykład IV/V

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

Zapis liczb binarnych ze znakiem

Reprezentacja symboli w komputerze. Liczby całkowite i zmiennoprzecinkowe. Programowanie Proceduralne 1

Wykład 2. Informatyka Stosowana. 10 października Informatyka Stosowana Wykład 2 10 października / 42

Wykład 2. Informatyka Stosowana. 9 października Informatyka Stosowana Wykład 2 9 października / 42

Wstęp do Informatyki. Reprezentacja liczb w komputerze Arytmetyka stało- i zmiennoprzecinkowa Przechowywanie danych pliki i foldery

Metoda znak-moduł (ZM)

B.B. 2. Sumowanie rozpoczynamy od ostatniej kolumny. Sumujemy cyfry w kolumnie zgodnie z podaną tabelką zapisując wynik pod kreską:

Pułapki liczb zmiennoprzecinkowych. Adam Sawicki asawicki.info

Transkrypt:

Arytmetyka zmiennoprzecinkowa a procesory cyfrowe Prawa algebry stosują się wyłącznie do arytmetyki o nieograniczonej precyzji x=x+1 dla x będącego liczbą całkowitą jest zgodne z algebrą, dopóki nie przekroczymy maksymalnej wartości, która jest możliwa do zapisania w skończonej długości słowa komputera. Z liczbami rzeczywistymi rzecz jest nieporównanie bardziej złożona. Zwykle liczby rzeczywiste przedstawia się w notacji naukowej : ±N.NN e±nn gdzie N jest cyfrą z danego systemu (np. dziesiętnego). W procesorze cyfrowym przeznaczamy pewną liczbę bitów na mantysę i wykładnik. 1/15

Konsekwentnie: liczby rzeczywiste w procesorach cyfrowych są tylko podzbiorem liczb rzeczywistych, tylko tymi, które można przedstawić przy pomocy skończonej liczby bitów. Ma to olbrzymi wpływ na wyniki obliczeń! Załóżmy, przykładowo, że operujemy liczbami z trzycyfrową mantysą i dwucyfrową cechą: ±N.NN e±nn Przed dodawaniem i odejmowaniem sprowadzamy zapis do postaci o jednakowym wykładniku. Np. dodając 1.23 e1 do 4.56e0 przedstawiamy drugi składnik jako 0.456 e1 i otrzymujemy sumę 1.686e1. Wynik musi jednak być zaokrąglony, by spełnić wymogi ograniczonej precyzji: i zatem wynosi 1.69 e1. Ale, nawet taki rachunek nie jest możliwy na procesorze, na którym nie możemy uzyskać pośredniego składnika 0.456 e1. W rzeczywistości nasz rachunek przyniesie wynik 1.68 e1, który jest jeszcze mniej dokładny! 2/15

MIKROKONTROLERY i MIKROPROCESORY - W obliczeniach składających się z sekwencji operacji arytmetycznych, błędy wynikające z ograniczonej precyzji kumulują się! Przykład: dodajemy 1.23e3 do 1.00e0 Wynik pozostaje niezmieniony:1.23e3 + 0.001e3 = 1.23e3 Ponieważ nie możemy przedstawić 0.001e3 z powodu niedostatecznej precyzji. Jeśli tę operację dodawania powtórzymy np. 10 razy, to otrzymamy nadal wynik 1.23 e3! Gdybyśmy jednakże dodali najpierw do siebie 10 razy 1.00 e0, a następne wynik (1.00 e1) do 1.23 e3 to otrzymalibyśmy inny (poprawny) wynik 1.24 e3! Arytmetyka o ograniczonej precyzji prowadzi tu do zasady: PORZĄDEK WYKONYWANIA DZIAŁAŃ WPŁYWA NA WYNIK! Otrzymuje się dokładniejsze wyniki, gdy względne wielkości liczb (wykładniki) są zbliżone. Przy sekwencji obliczeń powinno się grupować bliższe sobie składniki. 3/15

Inny problem pokazuje odejmowanie. Np. 1.23 e0 1.22 e0 = 0.01 e0 Po normalizacji, którą zwykle wykonuje się w końcu operacji arytmetycznych wynik ten 1.00 e-2 sugeruje, że dwie ostatnie cyfry znaczące są równe zeru, co w rzeczywistości może być przypadkowe. Mnożenia i dzielenia nie podlegają tym ograniczeniom ( nie ma potrzeby sprowadzania czynników do postaci z jednakowymi wykładnikami) Natomiast, operacje te mnożą, wzmacniają powstałe już błędy! W poprzednim przykładzie pomnożenie przez dwa obydwu wyników prowadzi do jeszcze większych rozbieżności: 2.46 e0 lub 2.48 e0 4/15

Pewną regułą może być zmierzanie do takiej organizacji obliczeń, by mnożenia i dzielenia wykonywane były wcześniej niż dodawania i odejmowania Tak więc obliczając wyrażenie x*(y+z) można uzyskać nieco lepszą dokładność wykonując x*y + x*z (co trudno czasem zaakceptować programistom, którzy zwracają uwagę na inną ekonomię obliczeń) Mnożenie i dzielenie ma oczywiste problemy również związane z ograniczoną precyzją arytmetyki procesorów cyfrowych - nadmiar i niedomiar (overflow and underflow) pojawiające się przy mnożeniu dwóch wielkich liczb lub przy dzieleniu małej liczby przez wielką 5/15

Porównanie liczb zmiennoprzecinkowych jest operacją, prowadzącą do błędnych wyników jeśli przeprowadzona niepoprawnie. NIGDY NIE NALEŻY TESTOWAĆ CZY DWIE LICZBY ZMIENNOPRZECINKOWE SĄ RÓWNE! Np. dodawanie 1.31 e0 + 2.69 e0 powinno dać wynik 4.00 e0, podobnie jak, 2.50 e0 + 1.50 e0. Jednakże porównanie najpewniej NIE WSKAŻE, ŻE WYNIKI SĄ IDENTYCZNE! Poprawnym postępowaniem powinno być przyjęcie dopuszczalnego błędu (tolerancji) i sprawdzenie, czy wyniki mieszczą się w tych granicach. If wartość1 >= (wartość2 tol) AND wartość1 <= (wartość2 +tol).. lub if abs(warość1 wartość2) <= tol then... 6/15

WARUNKI POWINNO SIĘ FORMUŁOWAĆ NASTĘPUJĄCO: = if abs(x-y) <= tol then... <> (!=) if abs(x-y) > tol then... < if (x-y) < tol then... <= if (x-y) <= tol then... > if (x-y) > tol then... >= if (x-y) >= tol then... 7/15

Gdy INTEL przystępował do produkcji koprocesora zmiennoprzecinkowego dla swojego nowego (wtedy) procesora 8086, to zwrócił się do najlepszych znawców analiz numerycznych o projekt formatów liczb zmiennoprzecinkowych dla 8087 FPU. Kahn, Coonan i Stone zaprojektowali tzw KCS Floating Point Standard, a IEEE przyjęła to za normę. Powstały: format liczb pojedynczej precyzji, format podwójnej precyzji, format precyzji rozszerzonej 8/15

FORMAT POJEDYNCZEJ PRECYZJI (32 bity) składa się z 24-bitowej mantysy, która reprezentuje wartości od 1.0 do (prawie) 2.0 1.mmmmmmm mmmmmmmm mmmmmmmm oraz 8-bitowej cechy Przyjmuje się, że pierwszy, HO, bit mantysy jest zawsze 1 i stoi na lewo od znaku oddzielającego część całkowitą od ułamkowej. Skoro jest ZAWSZE 1 to się go NIE zapisuje. Pozycję na lewo od (domyślnej) kropki dwójkowej zajmuje za to bit reprezentujący znak. Pozostałe 23 bity to bity na prawo od kropki dwójkowej. Mantysa jest zatem zawsze większa lub równa 1.0 (i najwyżej prawie równa 2.) 9/15

Wprawdzie między 1. a 2. jest nieskończona liczba wartości, to mantysa może reprezentować jedynie osiem milionów z nich! 24-bitowa mantysa (faktycznie 23-bitowa z domyślnym bitem o wartości 1.0) jest binarną liczbą bez znaku, a znak jest zapisany jako oddzielny bit! Przyjmuje się, że zwykłe zastosowania traktują zero jako reprezentację z bitem znaku równym zero. POJEDYNCZA PRECYZJA: S EEEEEEEE FFFFFFF FFFFFFFF FFFFFFFF 0 1 9 31 Jeśli 0<E<255 to V = (-1)**S * 2**(E-127) * (1.F) 10/15

If E=255 and F is nonzero, then V=NaN ("Not a number") If E=255 and F is zero and S is 1, then V = - Infinity If E=255 and F is zero and S is 0, then V = Infinity If E=0 and F is nonzero, then V=(-1)**S * 2 ** (-126) * (0.F) These are "unnormalized" values. If E=0 and F is zero and S is 1, then V = - 0 If E=0 and F is zero and S is 0, then V = 0 11/15

MIKROKONTROLERY i MIKROPROCESORY - POJEDYNCZA PRECYZJA: S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF 0 1 8 9 31 PRZYPADKI SZCZEGÓLNE: 0 00000000 00000000000000000000000 = 0 1 00000000 00000000000000000000000 = -0 0 11111111 00000000000000000000000 = NIESKOŃCZONOŚĆ 1 11111111 00000000000000000000000 = -NIESKOŃCZONOŚĆ 0 11111111 00000000000000000000000 = NaN 1 11111111 00100010001001010101010 = NaN... RACZEJ ZWYKŁE... 0 10000000 00000000000000000000000 = +1 * 2**(128-127) * 1.0 = 2.0 0 10000001 10100000000000000000000 = +1 * 2**(129-127) * 1.101 = 6.5 1 10000001 10100000000000000000000 = -1 * 2**(129-127) * 1.101 = -6.5... I ZNÓW TROCHĘ NIEZWYKŁE... 0 00000001 00000000000000000000000 = +1 * 2**(1-127) * 1.0 = 2**(-126) 0 00000000 10000000000000000000000 = +1 * 2**(-127) * 0.1 = 2**(-127) 0 00000000 00000000000000000000001 = +1 * 2**(-127) * 2**(-23)= 2**(-150) ZBIERAJĄC: WYKŁADNIK ZŁOŻONY Z SAMYCH JEDYNEK OBSŁUGUJE OBYDWIE NIESKOŃCZONOŚCI ORAZ NOT a NUMBER, A ZŁOŻONY Z SAMYCH ZER JEST ZAREZERWOWANY DLA ZERA ORAZ DENORMALS (fizycznie zero, a logicznie -127 ) 12/15

LICZBA ZNORMALIZOWANA TO TAKA, DLA KTÓREJ CZĘŚĆ CAŁKOWITA BIT NAJBARDZIEJ ZNACZĄCY -JEST RÓWNY 1. W SPAKOWANEJ FORMIE BIT TEN NIE JEST WIDOCZNY, JEST DOMYŚLNY. LOGICZNA DŁUGOŚĆ MANTYSY JEST O JEDEN BIT WIĘKSZA NIŻ JEJ DŁUGOŚĆ FIZYCZNA. PRZED WYKONYWANIEM OPERACJI MATEMATYCZNYCH POSTAĆ SPAKOWANA JEST ROZWIJANA. COPROCESOR ZAWSZE UŻYWA POSTACI 80-CIO BITOWEJ, UŻYWAJĄC SWOICH 80-BITOWYCH REJESTRÓW!!! LICZBY SĄ AUTOMATYCZNIE ODPAKOWYWANE PRZY ŁADOWANIU REJESTRÓW I PAKOWANE PRZY ODSYŁANIU DO PAMIĘCI. NIE ISTNIEJE SPAKOWANA FORMA 80-BITOWA. DENORMAL - LICZBA ZDENORMALIZOWANA TO TAKA, W KTÓREJ CZĘŚĆ WYKŁADNICZA JEST ZERO, A TAKŻE CZĘŚĆ CAŁKOWITA (NAJBARDZIEJ ZNACZĄCA) MATYSY JEST RÓWNA ZERU. UNNORMAL - LICZBA NIEZNORMALIZOWANA TO TAKA, W KTÓREJ CZĘŚĆ CAŁKOWITA MANTYSY JEST ZERO, A CZĘŚĆ WYKŁADNICZA DOWOLNA. UNNORMALS MOŻNA ZOBACZYĆ OCZYWI ŚCIE JEDYNIE W FORMIE ROZPAKOWANEJ. 13/15

PODWÓJNA PRECYZJA (IEEE): S EEEEEEEEEEE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0 1 11 12 63 11-BITOWA CECHA ORAZ 52-BITOWA MANTYSA (Z 53-CIM BITEM DOMYŚLNYM) Jeśli 0<E<2047 to V = (-1)**S * 2**(E-1023) * (1.F) 14/15

PRZYPADKI SZCZEGÓLNE If E=2047 and F is nonzero, then V=NaN ("Not a number") If E=2047 and F is zero and S is 1, then V = - Infinity If E=2047 and F is zero and S is 0, then V = Infinity If E=0 and F is nonzero, then V=(-1)**S * 2 ** (-1022) * (0.F) These are "unnormalized" values. If E=0 and F is zero and S is 1, then V = - 0 If E=0 and F is zero and S is 0, then V = 0 15/15