Arytmetyka komputerów - Politechnika Wrocławska

Transkrypt

Arytmetyka komputerów - Politechnika Wrocławska
Arytmetyka komputerów
Wersja: 5 z drobnymi mody kacjami!
Wojciech Myszka
2012-11-09 09:23:41 +0100
Cz¦±¢ I
Liczby binarne i arytmetyka komputerów
Arytmetyka komputerów
I
Zapis liczb
I
I
I
I
I
I
dwójkowy.
Ka»da z liczb zapisywana jest za pomoc¡ cyfr 0 i 1.
Ukªad jest pozycyjny waga cyfry zale»y od miejsca,
w którym zostaªa ustawiona.
Najmniej znacz¡ce miejsca s¡ po stronie prawej. . .
1010 to 1 × 23 + 0 × 22 + 1 × 21 + 0 × 20 czyli 8 + 0 + 2 + 0 = 10
NB liczby parzyste maj¡ zero na ko«cu, nieparzyste 1.
Arytmetyka dwójkowa
I
I
I
I
I
I
0+0=0
1+0=0+1=1
1 + 1 = 10
1×1=1
1×0=0×1=0
0×0=0
bardzo prosta.
Operacje logiczne
(Podstawowe) operacje logiczne to suma logiczna (OR), iloczyn
logiczny (AND), negacja (NOT), ró»nica symetryczna (XOR)
OR
0
1
0
0
1
1
1
1
AND
0
1
0
0
0
1
0
1
XOR
0
1
0
0
1
1
1
0
Arytmetyka komputera
Arytmetyka klasyczna
Jeste±my przyzwyczajeni do nast¦puj¡cych rzeczy :
1.
Je»eli x 6= 0 to ∀a
a + x 6= a
Arytmetyka komputera
Arytmetyka klasyczna
Jeste±my przyzwyczajeni do nast¦puj¡cych rzeczy :
1.
Je»eli x 6= 0 to ∀a
a + x 6= a
2.
a + b + ··· + z = z + y + ··· + b + a
Arytmetyka komputera
Arytmetyka klasyczna
Jeste±my przyzwyczajeni do nast¦puj¡cych rzeczy :
1.
Je»eli x 6= 0 to ∀a
a + x 6= a
2.
a + b + ··· + z = z + y + ··· + b + a
3.
∀a, b ∈ < a < b ∃c : a < c < b
Arytmetyka komputera
Arytmetyka klasyczna
Jeste±my przyzwyczajeni do nast¦puj¡cych rzeczy :
1.
Je»eli x 6= 0 to ∀a
a + x 6= a
2.
a + b + ··· + z = z + y + ··· + b + a
3.
∀a, b ∈ < a < b ∃c : a < c < b
W arytmetyce komputerowej powy»sze zasady nie zawsze
obowi¡zuj¡!
Liczby zmiennoprzecinkowe
1. Arytmetyka
1.1
1.2
1.3
1.4
Liczby
Liczby
Liczby
Liczby
naturalne
caªkowite
wymierne
rzeczywiste
2. Komptery
2.1 Liczby caªkowite ( integer )
2.2 Liczby staªoprzecinkowe
2.3 Liczby zmiennoprzecinkowe
Liczby caªkowite I
I
Sytuacja dosy¢ klarowna.
I
Na n bitach mo»emy zapisa¢ liczby caªkowite dodatnie z
zakresu od zera do 2n − 1
I
Jest pewien problem z liczbami ujemnymi: trzeba
zarezerwowa¢ miejsce na znak
I
Trzeba to tak zrobi¢, »eby podstawowe operacje
(dodawanie, odejmowanie i mno»enie,. . . ) byªy
wykonywane tak samo gdy argumenty s¡ dodatnie jak i
wtedy gdy s¡ ujemne.
I
Ukªad uzupeªnieniowy to zaªatwiª.
Liczby caªkowite II
I
Czasami korzysta si¦ z kodu BCD (Binary Coded Decimal
(cyfry) dziesi¦tne kodowane binarnie: liczba zapisywana
jest w ukªadzie dziesi¦tnym (za pomoc¡ cyfr dziesi¦tnych),
ale poszczególne cyfry kodowane s¡ binarnie
321(10) zapisywane jest jako 0011 0010 00012
Liczby ujemne
1. Trzeba zarezerwowa¢ jeden bit na zapami¦tanie znaku!
2. Wariant najprostszy
3
0000011
3. Wariant najprostszy −3 1000011
Jest to zapis znak moduª
4. Ale jak dodawa¢ takie liczby?
Liczby ujemne
Tablica odejmowania:
− 0 1
0 0 1
1 1 0
(Zakªadamy, »e operujemy na liczbach czterobitowych!)
0011 − 1 = 0010
0010 − 1 = 0001
0001 − 1 = 0000
0000 − 1 = 1111
Zatem −1 to 1111 (czterobitowo!)
Liczby ujemne
Dokonajmy prostego sprawdzenia:
5 + (−1)
0 1 0 1
1 1 1 1
Liczby ujemne
Dokonajmy prostego sprawdzenia:
5 + (−1)
0 1 0 1
1 1 1 1
1 0 1 0 0
Dygresja
Liczby dziesi¦tne, dwucyfrowe:
3 3
9 9
Dygresja
Liczby dziesi¦tne, dwucyfrowe:
3 3
9 9
1 3 2
Negacja liczby
Mnemotechniczny algorytm negacji jest bardzo prosty:
negujemy wszystkie bity i powstaª¡ liczb¦ zwi¦kszamy o 1:
1 to 0001
negacje: 1110
zwi¦kszenie o 1: 1111
2 to 0010
negacja: 1101
zwi¦kszenie o 1: 1110
sprawdzenie 5 + (−2)
0 1 0 1
1 1 1 0
1 0 0 1 1
Liczby staªoprzecinkowe
1. Liczby w których na zapami¦tanie cz¦±ci caªkowitej
przeznacza si¦ kilka(na±cie/dziesi¡t) bitów
2. Na zapami¦tanie cz¦±ci uªamkowej równie» u»ywa si¦
kilku(nastu?) bitów:
1 0 1 0 , 1 0 1 0
co odczytujemy jako:
1 ∗ 23 + 0 ∗ 22 + 1 ∗ 21 + 0 ∗ 20 + 1 ∗ 2−1 + 0 ∗ 2−2 + 1 ∗ 2−3 + 0 ∗ 2−4
lub 8 + 2 + 21 + 18 czyli 10,625
3. U»ywany bardzo rzadko ( nanse??)
4. Z matematycznego punktu widzenia s¡ to liczby wymierne
5. Jak w tej postaci zapisa¢ liczb¦ 1,1
Liczby zmiennoprzecinkowe I
1. S¡ to liczby zapisywane (kodowane) w sposób podobny do
znanego nam: c = 299792458 ∼ 3 ∗ 108 m/s
2. Czyli w postaci mantysa (2,99792458) plus wykªadnik 8,
zatem 2,99792458*108 albo inaczej 2,99792458 e8
3. W przypadku komputerów podstawa kodowania (tak
mantysy jak i wykªadnika) to 2!
4. Dodatkowo liczby zapisywane s¡ zawsze w postaci
znormalizowanej czyli takiej, »e cyfra przed przecinkiem
(kropk¡) dziesi¦tnym jest zawsze z zakresu mi¦dzy 1 a 9. (a
w ukªadzie dwójkowym zawsze jest równa 1!)
5. Na zapami¦tanie mantysy i wykªadnika przeznaczana jest
zawsze sko«czona liczba bitów.
Liczby zmiennoprzecinkowe II
6. Z matematycznego punktu widzenia s¡ to liczby wymierne.
7. Sposób zapisu liczb zmiennoprzecinkowych reguluje
standard IEEE-754.
Zgodnie ze standardem liczba zmiennoprzecinkowa zapisywana
jest tak:
I
Zakres liczb: ±1,18 · 10−38 do okoªo ±3,4 · 1038 .
I
Dokªadno±¢: 7 8 cyfr dziesi¦tnych.
Liczby zmiennoprzecinkowe III
I
Przypadki szczególne:
I
I
I
I
I
+0 wszystkie bity s¡ zerami
−0 bit znaku ustawiony, wszystkie bity s¡ zerami
liczby maªe (denormalized numbers) nie zakªada si¦
niezerowego pierwszego bitu mantysy
±∞ ustawione wszystkie bity wykªadnika, mantysa równa
zero (jako wynik dzielenia przez zero, na przykªad)
NaN (Not a Number) ustawione wszystkie bity wykª¡dnika,
mantysa ró»na od zera.
Par¦ problemów
1. Zawsze(?) ograniczona liczba bitów przeznaczona na
zapami¦tanie liczby (ale znane s¡ specjalne programy,
które staraj¡ si¦ te ograniczenie przezwyci¦»a¢).
2. Wynik dziaªa« arytmetycznych cz¦sto prowadzi do
powstania nadmiaru (czyli przekroczenia maksymalnej
dopuszczalnej warto±ci liczb).
3. Wi¦kszo±¢ liczb które (z przyzwyczajenia) traktujemy jako
dokªadne, nie ma dokªadnej reprezentacji dwójkowej (0,5
jest OK ale 0,1 ju» nie).
Operacje na liczbach zmiennoprzecinkowych I
1. Mno»enie.
Jest proste: mno»ymy mantysy i dodajemy wykªadniki.
1, 33 e+3 ∗ 1, 55 e+7 = 2, 0615 e+10
Nast¦pnie trzeba wynik obci¡¢ do odpowiedniej liczby
miejsc znacz¡cych (w naszym przypadku niech to b¦d¡ trzy
cyfry) 2, 06 e+10
W przypadku liczb binarnych b¦dzie podobnie.
Uwaga: czasami mo»e zdarzy¢ si¦ problem: w wyniku
mno»enia liczba mo»e ulec denormalizacji
wówczas
trzeba j¡ znormalizowa¢, zaokr¡gli¢ i skorygowa¢
wykªadnik: 5, 55 e+0 ∗ 6, 33e+0 = 35, 13 e+0 = 3, 51 e+1
Operacje na liczbach zmiennoprzecinkowych II
2. Dzielenie.
Post¦pujemy analogicznie jak w przypadku mno»enie
(dzielimy mantysy, odejmujemy wykªadniki). W przypadku
denormalizacji post¦pujemy jak wy»ej
1, 33 e+0/9, 88 e+0 = 0, 134615385 e+0 = 1, 35 e−1
3. Dodawanie.
Sprawa nieco bardziej skomplikowana. Aby dodawa¢ liczby
zmiennoprzecinkowe trzeba je najpierw
zdenormalizowa¢ i doprowadzi¢ do równo±ci
wykªadników:
1, 22 e+0 + 3, 35 e − 4 = 1, 22 e+0 + 0, 000335 e+0 =
1, 220335 e+0 = 1, 22 e+0
a nast¦pnie zaokr¡gli¢ i znormalizowa¢. . .
Operacje na liczbach zmiennoprzecinkowych III
4. Odejmowanie.
Identycznie jak dodawanie.
Konwersje
Dziesi¦tny do dwójkowego
Liczby caªkowite:
Liczb¦ dzielimy przez dwa zapisuj¡c reszty z dzielenia:
10
Konwersje
Dziesi¦tny do dwójkowego
Liczby caªkowite:
Liczb¦ dzielimy przez dwa zapisuj¡c reszty z dzielenia:
10
5 0
Konwersje
Dziesi¦tny do dwójkowego
Liczby caªkowite:
Liczb¦ dzielimy przez dwa zapisuj¡c reszty z dzielenia:
10
5 0
2 1
Konwersje
Dziesi¦tny do dwójkowego
Liczby caªkowite:
Liczb¦ dzielimy przez dwa zapisuj¡c reszty z dzielenia:
10
5 0
2 1
1 0
Konwersje
Dziesi¦tny do dwójkowego
Liczby caªkowite:
Liczb¦ dzielimy przez dwa zapisuj¡c reszty z dzielenia:
10
5 0
2 1
1 0
0 1
Konwersje
Dziesi¦tny do dwójkowego
Liczby caªkowite:
Liczb¦ dzielimy przez dwa zapisuj¡c reszty z dzielenia:
10
5 0
2 1
1 0
0 1
Reszty z dzielenia zapisujemy od ko«ca otrzymuj¡c 1010
Konwersje
Dziesi¦tny do dwójkowego
Cz¦±¢ uªamkowa:
Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡:
,33
Konwersje
Dziesi¦tny do dwójkowego
Cz¦±¢ uªamkowa:
Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡:
,33
0 ,66
Konwersje
Dziesi¦tny do dwójkowego
Cz¦±¢ uªamkowa:
Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡:
,33
0 ,66
1 ,32
Konwersje
Dziesi¦tny do dwójkowego
Cz¦±¢ uªamkowa:
Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡:
,33
0 ,66
1 ,32
0 ,64
Konwersje
Dziesi¦tny do dwójkowego
Cz¦±¢ uªamkowa:
Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡:
,33
0 ,66
1 ,32
0 ,64
1 ,28
Konwersje
Dziesi¦tny do dwójkowego
Cz¦±¢ uªamkowa:
Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡:
,33
0 ,66
1 ,32
0 ,64
1 ,28
0 ,56
Konwersje
Dziesi¦tny do dwójkowego
Cz¦±¢ uªamkowa:
Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡:
,33
0 ,66
1 ,32
0 ,64
1 ,28
0 ,56
1 ,12
Konwersje
Dziesi¦tny do dwójkowego
Cz¦±¢ uªamkowa:
Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡:
,33
0 ,66
1 ,32
0 ,64
1 ,28
0 ,56
1 ,12
0 ,24
Konwersje
Dziesi¦tny do dwójkowego
Cz¦±¢ uªamkowa:
Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡:
,33
0 ,66
1 ,32
0 ,64
1 ,28
0 ,56
1 ,12
0 ,24
0 ,48
Konwersje
Dziesi¦tny do dwójkowego
Cz¦±¢ uªamkowa:
Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡:
,33
0 ,66
1 ,32
0 ,64
1 ,28
0 ,56
1 ,12
0 ,24
0 ,48
0 ,96
Konwersje
Dziesi¦tny do dwójkowego
Cz¦±¢ uªamkowa:
Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡:
,33
0 ,66
1 ,32
0 ,64
1 ,28
0 ,56
1 ,12
0 ,24
0 ,48
0 ,96
1 ,92
Konwersje
Dziesi¦tny do dwójkowego
Cz¦±¢ uªamkowa:
Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡:
,33
0 ,66
1 ,32
0 ,64
1 ,28
0 ,56
1 ,12
0 ,24
0 ,48
0 ,96
1 ,92
1 ,84
Konwersje
Dziesi¦tny do dwójkowego
Cz¦±¢ uªamkowa:
Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡:
,33
0 ,66
1 ,32
0 ,64
1 ,28
0 ,56
1 ,12
0 ,24
0 ,48
0 ,96
1 ,92
1 ,84
1 ,68
Konwersje
Dziesi¦tny do dwójkowego
Cz¦±¢ uªamkowa:
Liczb¦ mno»ymy przez dwa i zapisujemy cz¦±¢ caªkowit¡:
,33
0 ,66
1 ,32
0 ,64
1 ,28
0 ,56
1 ,12
0 ,24
0 ,48
0 ,96
1 ,92
1 ,84
1 ,68
0,0101010001112 =0,32983398437510
Konwersje
Dwójkowy do dziesi¦tnego
Do zrobienia w domu!
Wnioski
1. Konwersja liczb dziesi¦tnych do dwójkowych cz¦sto
wprowadza bª¦dy.
2. Ograniczona liczba bitów powoduje, »e ka»de dziaªanie
wykonywane jest z bª¦dem.
3. W przypadku wielokrotnego powtarzania jakiego±
obliczenia sprawa zaczyna mie¢ znaczenie. . .
Cz¦±¢ II
Bª¦dy numeryczne
Bª¦dy
Bardzo prosty przykªad. Mamy dwa wyra»enia:
Wyra»enie 1
x = ((b + a) − a)/b
Bª¦dy
Bardzo prosty przykªad. Mamy dwa wyra»enia:
Wyra»enie 1
x = ((b + a) − a)/b
Wyra»enie 2
y = (b + (a − a))/b
Bª¦dy
Bardzo prosty przykªad. Mamy dwa wyra»enia:
Wyra»enie 1
x = ((b + a) − a)/b
Wyra»enie 2
y = (b + (a − a))/b
Jaki powinien by¢ wynik dziaªa« dla:
1. a = 5 i b = 100
Bª¦dy
Bardzo prosty przykªad. Mamy dwa wyra»enia:
Wyra»enie 1
x = ((b + a) − a)/b
Wyra»enie 2
y = (b + (a − a))/b
Jaki powinien by¢ wynik dziaªa« dla:
1. a = 5 i b = 100
2. a = 1.04 oraz b = 1.0−4
Bª¦dy
Bardzo prosty przykªad. Mamy dwa wyra»enia:
Wyra»enie 1
x = ((b + a) − a)/b
Wyra»enie 2
y = (b + (a − a))/b
Jaki powinien by¢ wynik dziaªa« dla:
1. a = 5 i b = 100
2. a = 1.04 oraz b = 1.0−4
3. a = 1.010 oraz b = 1.0−10
Bª¦dy
Bardzo prosty przykªad. Mamy dwa wyra»enia:
Wyra»enie 1
x = ((b + a) − a)/b
Wyra»enie 2
y = (b + (a − a))/b
Jaki powinien by¢ wynik dziaªa« dla:
1. a = 5 i b = 100
2. a = 1.04 oraz b = 1.0−4
3. a = 1.010 oraz b = 1.0−10
Sprawd¹my w praktyce. . .
Bª¦dy I
Najprostsze dodawanie (¹ródªo programu strona MSDN
zatytuªowana Why Floating-Point Numbers May Lose Precision )
// F l o a t i n g −point_number_precision . c
// Compile o p t i o n s needed : none . Value of c i s p r i n t e d with a
// p o i n t p r e c i s i o n of 10 and 6 ( p r i n t f rounded value by d e f a u
// show the d i f f e r e n c e
# include < s t d i o . h>
#define EPSILON 0.0001
// Define your own t o l e r a n c e
#define FLOAT_EQ ( x , v ) ( ( ( v − EPSILON ) < x )
&& ( x <( v + EPSILON ) ) )
i n t main ( ) {
float a, b, c;
a = 1.345 f ;
Bª¦dy II
b = 1.123 f ;
c = a + b;
// i f ( FLOAT_EQ ( c , 2 . 4 6 8 ) ) // Remove comment f o r c o r r e c t r
i f ( c == 2 . 4 6 8 )
// Comment t h i s l i n e f o r c o r r e c t
p r i n t f ( " L i c z b y sa rowne . \ n " ) ;
else
p r i n t f ( " L i c z b y n i e sa rowne ! Wartosc c wynosi %13.10 f
" or % f \ n " , c , c ) ;
}
Komentarz: Program dodaje dwie liczby, a wynik zapisuje w
zmiennej o nazwie c, a nast¦pnie sprawdza czy wynik jest taki
jak oczekiwano. Niestety nie jest.
Wyniki:
Bª¦dy III
Liczby nie sa rowne!
Wartosc c wynosi
2.4679999352
Dªugotrwaªe obliczenia I
Program w Pascalu dokonuj¡cy wielokrotnie prostej dosy¢
operacji. Na podstawie Some issues on oating-point precision
under Linux
program caos ;
{ $n+ }
{ you need to a c t i v a t e hardware f l o a t i n
i n order to use the extended type }
uses
crt ;
var
s : single ;
{ 32− b i t r e a l }
Dªugotrwaªe obliczenia II
r : real ;
d : double ;
e : extended ;
i : integer ;
begin
clrscr ;
s
r
d
e
:=
:=
:=
:=
0.5;
0.5;
0.5;
0.5;
{ 48− b i t r e a l }
{ 64− b i t r e a l }
{ 80− b i t r e a l }
Dªugotrwaªe obliczenia III
f o r i : = 1 to
s : = 3.8 ∗
r : = 3.8 ∗
d : = 3.8 ∗
e : = 3.8 ∗
100
s ∗
r ∗
d ∗
e ∗
do
(1
(1
(1
(1
begin
− s );
− r );
− d);
− e);
i f ( i /10 = i n t ( i / 1 0 ) ) then begin
writeln ( i :10 , s :16:5 , r :16:5 ,
d:16:5 , e :16:5);
end ;
end ;
Dªugotrwaªe obliczenia IV
readln ;
end .
Program wykonuje do±¢ proste obliczenia: sto razy wylicza
wyra»enie:
x = 3.8 ∗ x ∗ (1 − x)
Drukowana jest co dziesi¡ta warto±¢:
Dªugotrwaªe obliczenia V
10
20
30
40
50
60
70
80
90
100
0.18510
0.23951
0.88423
0.23013
0.76654
0.42039
0.93075
0.28754
0.82584
0.38775
0.18510
0.23963
0.90200
0.82493
0.53714
0.66878
0.53190
0.93557
0.69203
0.41983
0.18510
0.23963
0.90200
0.82493
0.53714
0.66878
0.53190
0.93557
0.69203
0.41983
Wida¢ wyra¹nie, »e precyzja liczb ma wpªyw na wyniki
oblicze«. . .
0.18510
0.23963
0.90200
0.82493
0.53714
0.66879
0.53203
0.93275
0.79884
0.23138
Podstawowe de nicje
Wielko±¢ dowolna staªa matematyczna, wynik jakiej±
operacji matematycznej (dziaªania), pierwiastek
rozwi¡zywanego równania. π jest √
okre±lony jako stosunek
obwodu okr¦gu do jego ±rednicy; 2 jest pierwiastkiem
równania kwadratowego X 2 − 2 = 0.
Warto±¢ dokªadna wielko±ci warto±¢ wynikaj¡ca wprost z
de nicji wielko±ci, nie obarczona »adnymi bª¦dami.
Warto±¢ przybli»ona wielko±ci warto±¢ liczbowa uzyskana w
wyniku oblicze«. Zazwyczaj w wyniku oblicze« nie uzyskujemy
dokªadnej warto±ci.
Wielko±ci zyczne
Ci±nienie, temperatura, dªugo±¢, st¦»enie to przykªady
wielko±ci zycznych, które bardzo cz¦sto mierzymy .
Ka»dy pomiar obarczony jest bª¦dem wynikaj¡cym
z dokªadno±ci u»ytego narz¦dzia pomiarowego.
Warto±¢ dokªadna to temperatura w jakim± miejscu sali; warto±¢
przybli»ona to warto±¢ zmierzona jakim± termometrem.
Obliczenia
I
U»ywamy komputera do dokonania jakich± oblicze«.
Obliczenia
I
U»ywamy komputera do dokonania jakich± oblicze«.
I
Komputer podaje wynik (a = 5,34273343) maj¡cy 8 cyfr po
przecinku.
Obliczenia
I
U»ywamy komputera do dokonania jakich± oblicze«.
I
Komputer podaje wynik (a = 5,34273343) maj¡cy 8 cyfr po
przecinku.
I
Czy mo»emy powiedzie¢, »e wyznaczona liczba ma
wszystkie cyfry poprawne?, Czy ró»ni si¦ od warto±ci
dokªadnej o mniej ni» 0,5 · 10−8 ?
Obliczenia
I
U»ywamy komputera do dokonania jakich± oblicze«.
I
Komputer podaje wynik (a = 5,34273343) maj¡cy 8 cyfr po
przecinku.
I
Czy mo»emy powiedzie¢, »e wyznaczona liczba ma
wszystkie cyfry poprawne?, Czy ró»ni si¦ od warto±ci
dokªadnej o mniej ni» 0,5 · 10−8 ?
I
A co z sytuacj¡, »e zastosowana metoda oblicze« jest maªo
dokªadna?
Bª¡d bezwzgl¦dny warto±ci przybli»onej I
Niech A b¦dzie warto±ci¡ dokªadn¡, a a warto±ci¡ przybli»on¡
pewnej wielko±ci. Bª¦dem bezwzgl¦dnym warto±ci
przybli»onej nazywamy ka»d¡ liczb¦ ∆a speªniaj¡c¡ warunek:
|A − a| ≤ ∆a,
to znaczy tak¡ liczb¦, »e
a − ∆a ≤ A ≤ a + ∆a.
Warto±¢ przybli»ona a i jej bª¡d bezwzgl¦dny ∆a wyznaczaj¡
przedziaª:
< a − ∆a; a + ∆a >,
do którego nale»y dokªadna warto±¢ A
Bª¡d bezwzgl¦dny nie jest okre±lony jednoznacznie!
Liczba przybli»ona
Je»eli a jest warto±ci¡ przybli»on¡ dla warto±ci dokªadnej A,
obci¡»on¡ bª¦dem ∆a, to par¦ liczb ∆a, a zapisan¡ w postaci
∆a
a
b¦dziemy nazywali liczb¡ przybli»on¡ dla A.
π
Wiemy, »e π = 3,14159265 . . .. Warto±ci¡ przybli»on¡ π cz¦sto
u»ywan¡ w rachunkach, jest liczba 3,14.
Jej bª¦dem bezwzgl¦dnym jest na przykªad liczba ∆a = 0,0016.
Dokªadna warto±¢ π jest zawarta mi¦dzy liczbami:
3,14 − 0,0016 ≤ π ≤ 3, 14 + 0,0016
to znaczy π znajduje si¦ w przedziale
< 3,1384; 3,1416 >
0,0016
Zatem mo»emy zapisa¢ π = 3,14
Równo±¢ w przybli»eniu
α
β
Je»eli liczby przybli»one a i b s¡ takie, »e przedziaª
< a − α; a + α > jest zawarty w przedziale < b − β; b + β > to
β
α
mówimy, »e liczba a jest w przybli»eniu równa liczbie b.
α
β
Zapisujemy to a⇒b.
α
β
β
Z tego »e a jest w przybli»eniu równe b NIE WYNIKA, »e b jest
α
w przybli»eniu równe a!
Zaokr¡glanie liczb przybli»onych
α
Dla dowolnej liczby przybli»onej a i dowolnej liczby
rzeczywistej b zachodzi zwi¡zek:
α
α+|a−b|
a⇒
b
α+|a−b|
α
czyli a jest w przybli»eniu równe b
Zaokr¡glanie stosujemy wtedy, gdy wynik jakich± dziaªa« ma
α
0,0000027
zbyt wiele cyfr. Zast¦puj¡c liczb¦ a=3,14159 liczb¡ 3,14
mo»emy oszacowa¢ bª¡d. Wynosi on
0,0000027 + |3,14159 − 3,14. Czyli: 0,0015927. Zatem:
0,0000027
0,0015927
3,14159⇒ 3,14
Zaokr¡glanie liczb przybli»onych
Je»eli β ≥ α, to:
α
β
a⇒b
Zatem
0,0015927
0,0016
3,14 ⇒ 3,14
Reguªy zaokr¡glania
I
Gdy wynik dziaªania arytmetycznego ma (za) du»o cyfr
mo»emy odrzuci¢ ostatnie, zb¦dne cyfry (pami¦taj¡c o
zwi¦kszeniu bª¦du zaokr¡glenia).
I
Gdy pierwsz¡ odrzucon¡ cyfr¡ jest 0, 1, 2, 3, 4 cyfr
pozostawionych w warto±ci przybli»onej nie zmieniamy.
I
Je»eli pierwsz¡ odrzucon¡ cyfr¡ jest 5, 6, 7, 8, 9 do
pozostawionej cz¦±ci warto±ci przybli»onej dodajemy 1 na
ostatnim zostawianym miejscu dziesi¦tnym.
Taka zmiana liczby przybli»onej nazywa si¦ poprawnym
zaokr¡gleniem.
Bª¡d wzgl¦dny
Bª¦dem wzgl¦dnym warto±ci przybli»onej a obarczonej bª¦dem
bezwzgl¦dnym ∆a nazywamy liczb¦:
εa =
∆a
|a|
Dziaªania na liczbach przybli»onych
suma
α
β
α+β
a + b=a + b
Dziaªania na liczbach przybli»onych
suma
α
β
α+β
α
β
α+β
a + b=a + b
ró»nica
a − b=a − b
Dziaªania na liczbach przybli»onych
iloczyn
α
β
|a|β+|b|α+αβ
a · b⇒
ab
Dziaªania na liczbach przybli»onych
iloczyn
α
|a|β+|b|α+αβ
β
a · b⇒
ab
dzielenie
γ
a
a:b⇒
b
α β
gdzie
γ=
α + | ba |β
.
|b| − β
Dziaªania na liczbach przybli»onych
suma
1. Pierwszy najmniej korzystny przypadek:
a − α + b − β = (a + b) − (α + β)
2. Drugi najmniej korzystny przypadek:
a + α + b + β = (a + b) + (α + β)
Dziaªania na liczbach przybli»onych
suma
1. Pierwszy najmniej korzystny przypadek:
a − α + b − β = (a + b) − (α + β)
2. Drugi najmniej korzystny przypadek:
a + α + b + β = (a + b) + (α + β)
(Zadanie domowe: jak b¦dzie w przypadku ró»nicy? A w
przypadku iloczynu?)
Przykªad
Obliczy¢ warto±¢ wielomianu
w(x) = a0 x4 + a1 x3 + a2 x2 + a3 x + a4
dla x = 2,1.
Przyjmijmy, »e wspóªczynniki wielomianu s¡ liczbami
dokªadnymi i równaj¡ si¦:
a0 = 2,3, a1 = 3, a2 = −4,5, a3 = 7,2, a4 = −0, 1
Najpierw obliczenia wykonamy z dokªadno±ci¡ do dwóch miejsc
po przecinku, a pó¹niej z dokªadno±ci¡ do czterech.
Przykªad cd
dwie cyfry
0,0
0,0
0,00
x2 =2,1 × 2,1=4,41
0,00
0,0
0,000
0,001
x3 =4, 41 × 2, 1=9,261⇒9,26
0,001
0,0
0,0021
0,0061
0,01403
0,01903
x4 =9,26 × 2,1⇒19,446 ⇒19,45
0,0
0,0061
0,02
2,3 × x4 =2,3 × 19,45 ⇒44,735 ⇒44,74 ⇒44,74
0,001
0
0,003
3x3 =3 × 9,26 ⇒27,78
0,0
0,00
0,000
0,005
−4,5x2 =−4,5 × 4,41⇒−19,845⇒−19,85
0,0
0,0
0,00
7,2x =7,2 × 2,1⇒15,12
suma:
0,02
0,003
0,005
0,00
0,0
0,028
w(2,1) =44,74 + 27,78 −19,85 + 15,12−0,1=67,69
Przykªad cd
cztery cyfry
0,0
0,0
0,00
0,0
0,00
x2 =2,1 × 2,1=4,41
0,000
x3 =4, 41 × 2, 1=9,261
0,000
0,0
0,0000
x4 =9,261 × 2,1=19,4481
0,0
0,0000
0,0000
0,00003
2,3 × x4 =2,3 × 19,4481=44,73063⇒44,7306
0,000
0
0,000
3x3 =3 × 9,261=27,783
0,0
0,00
0,000
−4,5x2 =−4,5 × 4,41=−19,845
0,0
0,0
0,00
7,2x =7,2 × 2,1=15,12
suma
0,00003
0,000
0,000
0,00
0,0
0,00003
w(2,1) =44,7306 + 27,783 − 19,845 + 15,12 − 0,1=67,6886
Przykªad cd
Zaªó»my teraz, »e wspóªczynniki obarczone s¡ bª¦dami i równaj¡ si¦:
0,01
0
0,02
0,02
0,01
a0 =2,3, a1 =3, a2 =−4,5, a3 =7,2, a4 =−0, 1
dwie cyfry
0,42
w(2,1) ⇒67,69
cztery cyfry
0,3678
0,3692
0,37
w(2,1) ⇒67,6886⇒67,69⇒67,69
Prowadzenie oblicze« z dokªadno±ci¡ do czterech cyfr po przecinku praktycznie nie
zwi¦kszyªo dokªadno±ci!
Wynika to st¡d, »e dane obarczone s¡ du»ym bª¦dem (ju» druga
cyfra po przecinku nie jest dokªadna).
Literatura dodatkowa I
John Bayko.
Great microprocessors of the past and present.
http://jbayko.sasktelwebsite.net/cpu.html, 2003.
Jeremy G. Butler.
Information technology history - outline.
http://www.tcf.ua.edu/AZ/ITHistoryOutline.htm, 1998.
David Goldberg.
What every computer scientist should know about
Floating-Point arithmetic.
Numerical Computation Guide. Sun Microsystems, Palo Alto,
2000.
Literatura dodatkowa II
Dost¦pne jako: http://docs.sun.com/source/806-3568/
ncg_goldberg.html#674.
Witold Komorowski.
Architektura Minikomputerow.
Wydawnictwa Naukowo-Techniczne, Warszawa, 1980.
Witold Komorowski.
Architektura Komputerów.
Wydawnictwo Politechniki Wrocªawskiej, Warszawa, 1986.
Witold Komorowski.
Architektura Komputerow: Skrypt.
Politechnika Wrocªawska, Wrocªaw, 1987.
Literatura dodatkowa III
Witold Komorowski.
Instrumenta Computatoria: [wybrane Architektury
Komputerów].
"Helion", Gliwice, 2000.
Witold Komorowski.
Krótki Kurs Architektury I Organizacji Komputerów.
Mikom, Warszawa, 2004.
Wojciech Myszka.
Przykªadowe programiki pokazuj¡ce problemy numeryczne.
Dost¦pne pod adresem
http://www.immt.pwr.wroc.pl/~myszka/TI/kod.html,
pa¹dziernik 2008.
Literatura dodatkowa IV
Roman Zuber.
Metody numeryczne i programowanie.
WSziP, 1975.
fragmenty:
http://www.immt.pwr.wroc.pl/~myszka/TI/zuber.pdf
oraz
http://www.immt.pwr.wroc.pl/~myszka/TI/zuber1.pdf.
Kolofon
Prezentacja zªo»ona w systemie LATEX 2ε z wykorzystaniem klasy
beamer. U»yto fontu MS Trebuchet. Ilustracja na stronie
tytuªowej jest zdj¦ciem przedstawiaj¡cym fragment procesora.
Pavert, rob van de. CPU, Stycze« 1, 2005.
http://www.flickr.com/photos/rob20/101300834/.

Podobne dokumenty