Föreläsningsanteckningar

Teknisk Beräkningsvetenskap I
Tema 1: Avrundning och populationsmodellering
Eddie Wadbro
4 november 2015
Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 4 november 2015
(1 : 21)
Innehåll
I
Datoraritmetik och flyttal
I
Standard flyttalsformatet: IEEE 754 binary 64
I
Avrundningsenheten eller maskinepsilon
I
Avrundningsfelsanalys
I
Varningar, konsekvenser, samt tumregler för numeriska beräkningar
I laborationen ser vi hur avrundningsfel kan påverka resultatet vid
simulering av en enkel populationsmodell
Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 4 november 2015
(2 : 21)
Felkällor
I
Att approximera lösningar till matematiska problem med hjälp av
datorer inducerar diverse fel
I
Viktigt att skilja mellan diskretiseringsfel och avrundningsfel
I
I denna kurs tittar vi inte på fel i indata/mätfel, vilka ofta är
oundvikliga...
Ex: Datorrepresentation av en bild
I
Diskretiseringsfel: en spatiellt kontinuerlig bild rastreras till pixlar
(exempelvis 800 × 600)
I
Avrundningsfel: endast ett fixt antal (exempelvis 224 vilket är
ungefär 16.8 miljoner) färger att välja mellan för varje pixel
Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 4 november 2015
(3 : 21)
Felkällor
I
Vanligtvis dominerar diskretiseringsfelen
I
I många fall kan avrundningsfelen försummas
Även om avrundningsfel vanligtvis är små så är kan de både vara
märkbara och irriterande i praktiska beräkningar med reella tal
Uttryck
cos π/2
0.08 + 0.42 − 0.5
0.42 − 0.5 + 0.08
Exakt värde
0
0
0
i Matlab
6.1232e-017
0
-1.3878e-017
Dessutom så kan avrudningfel, i vissa exceptionella fall (som vi kommer
att diskutera i detta tema) ha katastrofala följder
Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 4 november 2015
(4 : 21)
Binära tal
I
I datorer lagras tal oftast i binär form:
4 bitar
z}|{
( 1101)2 = 1 · 23 + 1 · 22 + 0 · 21 + 1 · 20 = (13)10
I
Naturliga tal lagras exakt i binär form
I
I
Om vi har n bitar (Eng.: bits) så kan vi lagra tal upp till 2n − 1
Binära rationella tal:
(0.1101)2 = 1 · 2−1 + 1 · 2−2 + 0 · 2−3 + 1 · 2−4
1 1
1
13
= + +0+
=
= (0.8125)10
2 4
16
16
I
Observera: Talen 0.1, 0.2, 0.3, 0.4, 0.6, 0.7, 0.8, 0.9 kan inte
representeras exakt binärt! (Dessa tal har en oändlig
decimalutveckling i basen 2)
Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 4 november 2015
(5 : 21)
Flyttal
I
De flesta reella tal kan inte lagras exakt; de måste avrundas och
begränsas
I
I stort sett all hårdvara och mjukvara som produceras idag stödjer
IEEEs standard för flyttalsartimetik IEEE 754
I
IEEE 754 antogs 1985. 2008 släpptes en uppdaterad version av
standarden: IEEE 754-2008
I
Standarden ger en maskinoberoende modell för hur flyttalsartimetik
ska fungera
I
Matlab använder som standard flyttalsformatet IEEE binary 64
(double precision), det mest använda formatet för att lagra flyttal
Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 4 november 2015
(6 : 21)
Flyttalsformetet IEEE 754 binary 64
I
Normaliserade flyttal lagras
I
Alla nollskilda flyttal kan skrivas på formen
x = (−1)s · (1 + f ) · 2e ,
där
I
I
I
0 ≤ f < 1 (mantissan, eller bråkdelen (Eng.: fraction))
representeras i binär form med 52 bitar
e (exponenten) är ett heltal som uppfyller −1022 ≤ e ≤ 1023
(E = e + 1023 largras med 11 bitar)
1 bit används för att lagra tecknet s (0 positiv, 1 negativ)
I
Antalet bitar som används för att lagra f begränsar precisionen
I
Antalet bitar som används för att lagra e begränsar omfånget
I
Enbart f , E och s lagras; den inledande 1an lagras inte (“gömd bit”)
I
Talet 0 hanteras separat (E = f = 0 representerar talet 0)
Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 4 november 2015
(7 : 21)
Flyttalsformatet IEEE 754 binary 64
x = (−1)s · (1 + f ) · 2e ,
lagras med 1 bit för tecknet s, 11 bitar används för att lagra exponenten
som E = e + 1023 och 52 bitar representerar mantissan 0 ≤ f < 1
Totalt använder vi 64 bitar, eller 8 byte (1 byte = 8 bitar), för att largra
ett flyttal
mantissa
63
62
61
60
59
58
57
56
55
54
53
52
51
50
49
48
47
46
45
44
43
42
41
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
ken exponent
tec
Ex: En reell 1000 × 1000 matris innehåller 106 tal; för att lagra denna
matris behöver vi 8 MB minne (106 flyttal·8 byte/flyttal)
Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 4 november 2015
(8 : 21)
Maskinepsilon
I
Antalet tecken (tal) i mantissan f begränsar flyttalssystemets
precision
I
IEEE 754 binary 64 använder 52 binära “tecken” för att lagra f
I
Avståndet mellan talet 1 och nästa representerbara tal kallas för
maskinepsilon M
I
M beror på vilket flyttalssystem som används; i IEEE 754 binary 64
är M = 2−52 ≈ 2.2204 × 10−16
(1.000000000000000000000000000000000000000000000000000
|
{z
}1)2
51 nollor
I
M ger en bild av flyttalssystemets precision
Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 4 november 2015
(9 : 21)
Avstånd mellan flyttal
x = ±(1 + f ) · 2e ,
I
När e = 0, så är avståndet mellan två konsekutiva flyttal M . Ex:
(1.011000000000000000000000000000000000000000000001000)2
−(1.011000000000000000000000000000000000000000000000111)2
=(0.000000000000000000000000000000000000000000000000001)2
I
När e = 1, så är avståndet mellan två konsekutiva flyttal 2M
I
Generallt så är är avståndet mellan två konsekutiva flyttal 2e M
I
För en fix exponent är avståndet mellan konsekutiva flyttal konstant
I
Avståndet mellan konsekutiva flyttal växer tillsammans med
exponenten
Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 4 november 2015
(10 : 21)
Överspill (Overflow) och underspill (underflow)
I
Betrakta tal på formen x = ±(1 + f ) · 2e där −1022 ≤ e ≤ 1023
I
Det största (till beloppet) representerbara flyttalet är
xmax = (2 − M ) · 21023
I
Försök att largra tal med |x| > xmax medför överspill (Eng.:
overflow); många program avslutas och lämnar felmeddelande när
detta händer
I
Det minsta (till beloppet) representerbara flyttalet med full precision
är xmin = 2−1022
I
Försök att lagra tal med |x| < xmin medför underspill (Eng.:
underflow); de flesta program fortsätter när detta händer, vissa
program skriver ut en varning och sätter x = 0 och fortsätter därefter
Obs: xmin är mycket mindre än M !
Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 4 november 2015
(11 : 21)
Specialfall
I
Vi har: x = (−1)s · (1 + f ) · 2e , där −1022 ≤ e ≤ 1023
I
Vi lagrar s, E = e + 1023 och f
Standarden IEEE 754 definierar följande specialfall
I
E = 0 och f = 0 representerar noll
I
“subnormala flyttal” eller “gradvis underspill”: E = 0 och f 6= 0
betecknar flyttalet ±(0 + f ) · 2−1022 , vilket möjliggör lagring av
flyttal (med minskad noggrannhet) ner till 2−1074
I
De (utökade reella) talen +∞ och −∞
(representeras av E = 2047 = (11111111111)2 och f = 0)
I
Symbolen icke-ett-tal (Eng.: not-a-number), eller NaN lagras med
E = 2047 och f 6= 0. NaN uppkommer vanligtvis som resultat av en
icke väldefinierad operation som 0/0.
Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 4 november 2015
(12 : 21)
Absolut och relativt fel
I
x: exakt (reellt) tal
I
x̂: tal med fel (mätfel, avrundingsfel, . . . )
I
Absolut fel: |x − x̂|
Relativt fel:
|x − x̂|
(x 6= 0)
|x|
Om x är en vektor, används vektornormer för att uttrycka fel
I
Absolut fel: kx − x̂k
där, exempelvis, kxk =
Relativt fel:
n
X
kx − x̂k
(x 6= 0)
kxk
!1/2
xi2
i=1
(vi kommer att titta på fler vektornormer i nästa tema!)
Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 4 november 2015
(13 : 21)
Avrundningsfel
I
Anta att ett givet reellt tal x approximeras av flyttalet fl(x) och att
vi arbetar i IEEE 754 binary 64
x = (−1)ŝ · (1 + fˆ) · 2ê , (där ŝ ∈ {0, 1}, 0 ≤ fˆ < 1, och ê ∈ Z) , eller x = 0
I
fl(x) = (−1)s · (1 + f ) · 2e , eller fl(x) = 0 (om x = 0)
I
Hur stort är avrundingsfelet |x − fl(x)|?
I
Skissen nedan illustrerar flyttalen (och deras avstånd) i ett område
som innhåller 2n .
I
M 2n−1
•
I
M 2n−1
•
M 2n−1
•
fl(x)?
M 2n
•
fl(x)?
x 2n
M 2n
•
•
Således har vi, för varje meningsfull avrundning, att
|x − fl(x)| ≤ M · 2ê
Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 4 november 2015
(14 : 21)
Avrundsningsstrategier
I
Det finns många standarder för avrundning:
I
I
I
I
I
I
avrunda
avrunda
avrunda
avrunda
avrunda
uppåt (mot +∞)
nedåt (mot −∞)
mot noll
bort från noll
till närmsta flyttal—default avrundningsstrategin i IEEE 754
Vid avrundning till närmsta flyttal gäller
1
|x − fl(x)| ≤ M · 2ê
2
I
Vid avrundning till närmsta flyttal, behöver vi en regel för att ta
hand om fallet med två tal med samma avstånd (Ex: Vid lika, så
avrundar Matlab så att den sista siffran i mantissan är 0)
Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 4 november 2015
(15 : 21)
Avrundningsfel
I
I
Konstatera att |x| = |(−1)s (1 + fˆ) · 2ê | ≥ 2ê när x 6= 0
Om vi avrundar till närmsta flyttal (och x 6= 0) så kan vi begränsa
det relativa felet
1
M · 2ê
|x − fl(x)|
1
≤ 2 ê
= M
|x|
2
2
I
Föjaktligen, när vi avrundar till närmsta flyttal:
Det relativa felet i flyttalsapproximation
av nollskilda tal begränsas av 12 M
I
I synnerhet har vi att det relativa felet är oberoende av storleken på
talet
Observera: Vissa betecknar kvantiteten µ = 12 M för “maskinepsilon” eller
“avrundningsenheten” (Eng.: unit roundoff) [Eldén, Wittmeyer–Koch]
Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 4 november 2015
(16 : 21)
Avrundningsfel i praktiken
I
Maskinepsilon är ett mått på den relativa noggrannheten hos ett
lagrat flyttal
I
Standarden IEEE 754 binary 64 ger en precision på ungefär 16 siffror
(i basen 10)
I
I praktiken utförs många flyttalsoperationer på tal som har blivit
avrundade. Likväl är det ackumulerade relativa felet i sluttresultatet
oftast inte mer än ett par storleksordningar över M
I
I de flesta vall är avrundningsfelen mycket mindre än andra fel
(diskretiseringsfel och mätfel)!
I
Men det finns några “förrädiska” fall att se upp för!
Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 4 november 2015
(17 : 21)
Noggrannhetsförlust eller kancellering av signifikanta siffror
I
Vid subtraktion av nästan lika tal:
1.23456789 − 1.23456700 = 0.00000089
I
Om båda talen i vänsterledet har 9 korrekta siffror, alltså att
absolutfelet dessa tal begänsat av 5 · 10−9
I
I
I
I
I
det relativa felet i talen i vänsterledet mindre än 10−8
det absoluta felet i högerledet är begränsat av 10−8
men det relativa felet i högerledet kan vara 10−2
Detta fenomen kallas noggrannhetsförlust eller kancellering av
signifikanta siffror
Ibland kan detta undvikas genom omskrivning. Ex:
√
√
√
√
√
√
( 1 + x − 1 − x)( 1 + x + 1 − x)
√
√
1+x − 1−x =
1+x + 1−x
2x
√
=√
1+x + 1−x
Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 4 november 2015
(18 : 21)
Konsekvenser och tumregler
I
if x==y then... är inte ett bra test om x och y är flyttal som kan
ha avrundats (exempelvis om de är resultat från olika beräkningar)
I
Det är bättre att använda if abs(x-y) <= tolerance then...
där tolerance är ett litet tal
I
Undvik, om möjligt, subtraktion av nästan lika tal
I
De associativa och distributiva lagarna gäller inte exakt för flyttal
(vanligtvis inte särskilt viktigt)
P
Vid beräkning av N
n=1 sn , försök att börja med de minsta (till
beloppet) talen
I
Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 4 november 2015
(19 : 21)
När är avrundsningsfel märkbara?
I
Låt oss återvända till vårt första exempel. Datorrepresentation av en
bild
I
I
Diskretiseringsfel: en spatiellt kontinuerlig bild rastreras till pixlar,
där varje pixel tilldelas en färg (Ex: tre tal mellan 0 och 1 som
beskriver hur mycket rött, grönt och blått fägen har)
Avrundningsfel: För varje pixel så avrundas talen som beskriver färg
så att de kan lagras.
I
Om vi exempelvis använder oss av flyttalsystemet IEEE 754
binary 64 för att representera färgerna, så kan avrundningsfelet
försummas, diskretiseringsfelet dominerar totalt!
I
I det flesta fall, där beräkningar utförs, så behöver vi inte bekymra
oss om avrundningsfel
I
Två viktiga undantag!
Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 4 november 2015
(20 : 21)
När är avrundsningsfel märkbara?
1. Känsliga problem Lösningen till matematiska problem kan ibland vara
mycket känsliga för förändringar i indata: små förändringar i data
medför stora förändringar i lösningen. De små fel som som
introduceras vid avrundningen av indata kan därför orsaka märkbara
förändringar i lösningen. Sådana problem kallas illa-konditionerade
eller i vissa extrema fall illa-ställda
2. Numeriskt instabila algoritmer Vissa numeriska algoritmer är mycket
känsliga för avrundningsfel även då till tillämpas på välställda
problem. Om möjligt, undvik sådana algoritmer!
Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 4 november 2015
(21 : 21)