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 Datoraritmetik och flyttal Standard flyttalsformatet: IEEE 754 binary 64 Avrundningsenheten eller maskinepsilon Avrundningsfelsanalys 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 Att approximera lösningar till matematiska problem med hjälp av datorer inducerar diverse fel Viktigt att skilja mellan diskretiseringsfel och avrundningsfel I denna kurs tittar vi inte på fel i indata/mätfel, vilka ofta är oundvikliga... Ex: Datorrepresentation av en bild Diskretiseringsfel: en spatiellt kontinuerlig bild rastreras till pixlar (exempelvis 800 600) Avrundningsfel: endast ett fixt antal (exempelvis 2 24 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 Vanligtvis dominerar diskretiseringsfelen 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 Exakt värde i Matlab cos π/2 0 6.1232e-017 0.08 + 0.42 0.5 0 0 0.42 0.5 + 0.08 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 datorer lagras tal oftast i binär form: 4 bitar {}}{ ( 1101) 2 = 1 2 3 + 1 2 2 + 0 2 1 + 1 2 0 = (13) 10 Naturliga tal lagras exakt i binär form Om vi har n bitar (Eng.: bits) så kan vi lagra tal upp till 2 n 1 Binära rationella tal: (0.1101) 2 = 1 2 1 + 1 2 2 + 0 2 3 + 1 2 4 = 1 2 + 1 4 + 0 + 1 16 = 13 16 = (0.8125) 10 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 De flesta reella tal kan inte lagras exakt; de måste avrundas och begränsas I stort sett all hårdvara och mjukvara som produceras idag stödjer IEEEs standard för flyttalsartimetik IEEE 754 IEEE 754 antogs 1985. 2008 släpptes en uppdaterad version av standarden: IEEE 754-2008 Standarden ger en maskinoberoende modell för hur flyttalsartimetik ska fungera 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 Normaliserade flyttal lagras Alla nollskilda flyttal kan skrivas på formen x = ( 1) s (1 + f ) 2 e, där 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) Antalet bitar som används för att lagra f begränsar precisionen Antalet bitar som används för att lagra e begränsar omfånget Enbart f, E och s lagras; inte den inledande 1an ( gömd bit ) 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 ) 2 e, 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 63 62 61 60 8 7 6 5 4 3 2 1 0 tecken exponent mantissa 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 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 Ex: En reell 1000 1000 matris innehåller 10 6 tal; för att lagra denna matris behöver vi 8 MB minne (10 6 flyttal 8 byte/flyttal) Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 5 november 2014 (8 : 21) Maskinepsilon Antalet tecken (tal) i mantissan f begränsar flyttalssystemets precision IEEE 754 binary 64 använder 52 binära tecken för att lagra f Avstådnet mellan talet 1 och nästa representerbara tal kallas för maskinepsilon ɛ M ɛ M beror på vilket flyttalssystem som används; i IEEE 754 binary 64 är ɛ M = 2 52 2.2204 10 16 (1.000000000000000000000000000000000000000000000000000 }{{} 1) 2 51 nollor ɛ 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 ) 2 e, När e = 0, så är avståndet mellan två konsekutiva flyttal ɛ M. Ex: (1.011000000000000000000000000000000000000000000001000) 2 (1.011000000000000000000000000000000000000000000000111) 2 =(0.000000000000000000000000000000000000000000000000001) 2 När e = 1, så är avståndet mellan två konsekutiva flyttal 2ɛ M Generallt så är är avståndet mellan två konsekutiva flyttal 2 e ɛ M För en fix exponent är avståndet mellan konsekutiva flyttal konstant 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) Betrakta tal på formen x = ±(1 + f ) 2 e där 1022 e 1023 Det största (till beloppet) representerbara flyttalet är x max = (2 ɛ M ) 2 1023 Försök att largra tal med x > x max medför överspill (Eng.: overflow); många program avslutas och lämnar felmeddelande när detta händer Det minsta (till beloppet) representerbara flyttalet med full precision är x min = 2 1022 Obs: x min är mycket mindre än ɛ M! Försök att lagra tal med x < x min 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 Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 5 november 2014 (11 : 21) Specialfall Vi har: x = ( 1) s (1 + f ) 2 e, där 1022 e 1023 Vi lagrar s, E = e + 1023 och f Standarden IEEE 754 definierar följande specialfall E = 0 och f = 0 representerar noll subnormala flyttal eller gradvis underspill : E = 0 och f 0 betecknar flyttalet ±(0 + f ) 2 1022, vilket möjliggör lagring av flyttal (med minskad noggrannhet) ner till 2 1074 De (utökade reella) talen + och (representeras av E = 2047 = (11111111111) 2 och f = 0) Symbolen icke-ett-tal (Eng.: not-a-number), eller NaN lagras med E = 2047 och f 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 x: exakt (reellt) tal ˆx: tal med fel (mätfel, avrundingsfel,... ) Absolut fel: x ˆx Relativt fel: x ˆx x (x 0) Om x är en vektor, används vektornormer för att uttrycka fel Absolut fel: x ˆx Relativt fel: där, exempelvis, x = ( n xi 2 i=1 ) 1/2 x ˆx x (x 0) (vi kommer att titta på fler vektornormer i nästa tema!) Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 5 november 2014 (13 : 21) Avrundningsfel 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 fl(x) = ( 1) s (1 + f ) 2 e, eller fl(x) = 0 (om x = 0) Hur stort är avrundingsfelet x fl(x)? Skissen nedan illustrerar flyttalen (och deras avstånd) i ett område som innhåller 2 n. ɛ M 2 n 1 ɛ M 2 n 1 ɛ M 2 n 1 ɛ M 2 n ɛ M 2 n fl(x)? fl(x)? x 2 n 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 Det finns många standarder för avrundning: avrunda uppåt (mot + ) avrunda nedåt (mot ) avrunda mot noll avrunda bort från noll avrunda till närmsta flyttal default avrundningsstrategin i IEEE 754 Vid avrundning till närmsta flyttal gäller x fl(x) 1 2 ɛ M 2ê 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 Konstatera att x = ( 1) s (1 + ˆf ) 2ê 2ê när x 0 Om vi avrundar till närmasta flyttal (och x 0) så kan vi begränsa det relativa felet x fl(x) x 1 2 ɛ M 2ê 2ê = 1 2 ɛ M Föjaktligen, när vi avrundar till närmsta flyttal: Det relativa felet i flyttalsapproximation av nollskilda tal begränsas av 1 2 ɛ M I synnerhet har vi att det relativa felet är oberoende av storleken på talet Observera: Vissa betecknar kvantiteten µ = 1 2 ɛ 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 Maskin epsilon är ett mått på den relativa noggrannheten hos ett lagrat flyttal Standarden IEEE 754 binary 64 ger en precision på ungefär 16 siffror (i basen 10) 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 de flesta vall är avrundningsfelen mycket mindre än andra fel (diskretiseringsfel och mätfel)! 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 Vid subtraktion av nästan lika tal: 1.23456789 1.23456700 = 0.00000089 Om båda talen i vänsterledet har 9 korrekta siffror, alltså att absolutfelet dessa tal begänsat av 5 10 9 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 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) Det är bättre att använda if abs(x-y) <= tolerance then... där tolerance är ett litet tal Undvik, om möjligt, subtraktion av nästan lika tal De associativa och distributiva lagarna gäller inte exakt för flyttal (vanligtvis inte särskilt viktigt) Vid beräkning av N n=1 s n, försök att börja med de minsta (till beloppet) talen Eddie Wadbro, Tema 1: Avrundning och populationsmodellering, 5 november 2014 (19 : 21) När är avrundsningsfel märkbara? Låt oss återvända till vårt första exempel. Datorrepresentation av en bild 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. 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 det flesta fall, där beräkningar utförs, så behöver vi inte bekymra oss om avrundningsfel 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)