Teknisk Beräkningsvetenskap I Tema 1: Avrundning och populationsmodellering Eddie Wadbro 5 november 2014 Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 5 november 2014 (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, 5 november 2014 (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, 5 november 2014 (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, 5 november 2014 (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.8125)10 = + +0+ 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, 5 november 2014 (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, 5 november 2014 (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; inte den inledande 1an (“gömd bit”) I Talet 0 hanteras separat (E = f = 0 representerar talet 0) Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 5 november 2014 (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, 5 november 2014 (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ådnet 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, 5 november 2014 (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, 5 november 2014 (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, 5 november 2014 (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, 5 november 2014 (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, 5 november 2014 (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 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 . 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, 5 november 2014 (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, 5 november 2014 (15 : 21) Avrundningsfel I I Konstatera att |x| = |(−1)s (1 + fˆ) · 2ê | ≥ 2ê när x 6= 0 Om vi avrundar till närmasta 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, 5 november 2014 (16 : 21) Avrundningsfel i praktiken I Maskin epsilon ä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, 5 november 2014 (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, 5 november 2014 (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, 5 november 2014 (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, 5 november 2014 (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, 5 november 2014 (21 : 21)