TANA09 Föreläsning 2 Talrepresentation i datorer. Flyttalssystem. Datoraritmetik och Beräkningsfel. Beräkningsfelsanalys och Kancellation. Serier och Resttermsuppskattningar. Tillämpning - Beräkning av π. 7 november 2014 Sida 1 / 21
Talrepresentation i Datorer Tal kan skrivas på exponentform eller som flyttal. Exempelvis är 763.45 = 7.6345 10 2. Ett flyttal är normaliserat om det endast finns en siffra framför decimalpunkten. Talet har heltalsdelen 7 och bråkdelen 0.6345. Detta betyder egentligen (7 10 0 + 6 10 1 + 3 10 2 + 4 10 3 + 5 10 4 )10 2. Vi har alltså ett positionssystem med basen 10. Hur ser datorn flyttalssystem ut? 7 november 2014 Sida 2 / 21
Definition Ett flyttalssystem karakteriseras av parametrar (β, t, L, U), där β är talsystemets bas, t är antalet siffror i bråkdelen, och L och U är systemets minsta respektive största exponent. Exempel Talsystemet (10, 3, 9, 9) innehåller exempelvis talen 4.562, 123.7, och 0.006532. Talet 0 kan inte skrivas som ett normaliserat flyttal. 7 november 2014 Sida 3 / 21
IEEE 754 Enkel Precision(2, 23, 126, 127) I datorn lagras talet som ett ord (32 bitar). Bitarna fördelas som s (1 bit) e (8 bitar) f (23 bitar) I Normalfallet, 1 e 254, gäller att flyttalet skall tolkas som, x = ( 1) s (1.f) 2 2 e 127. Undntagsfallen e = 0 eller e = 255 ger möjlighet att definiera x = 0, x = ±, och x = NaN. Exempel Hur lagras talet 13.25 i datorn? 7 november 2014 Sida 4 / 21
Observation Då vi lagrar x=0.1 i flyttalssystemet (2, 23, 126, 127) fås x = (0.1) 10 = (0.0001100110011...) 2 = (1.1001100110011...) 2 4 Med 23 bitar i bråkdelen blir inte x = 0.1 lagrat exakt på datorn. Ett avrundningsfel x xr 2 27 = 7.45 10 9 görs. Är det viktigt? Ett tal som kan lagras exakt i det decimala talsystemet kan inte säkert lagras exakt i det binära. Felen är små men datorer kan göra många beräkningar snabbt. 7 november 2014 Sida 5 / 21
Exempel Patriot missiler hade en intern klocka som mätte tiden i antal tiondelssekunder lagrat som heltal. Innan tidsvariabeln användes i beräkningar gjordes den om till ett enkelprecisions flyttal. Ju längre systemet varit påslaget desto större fel får man i tidsvariabeln. Felaktig tid gör att man inte kan lösa ekvationerna för målträff med tillräckligt hög precision. Varje gång man slog på systemet och testade lyckades det skjuta ned inkommande missiler. I skarpt läge lät man systemet vara påslaget ett par dagar innan anfallet kom och då misslyckades det med 24 dödsfall som resultat. Exempel Kriminella tillämpningar finns också. Genom att göra en massa små uttag och insättningar precis under respektive över gränser för avrundningsfelet har det gått att öka tillgodohavande på ett konto. Dessa, och andra, exempel presenteras i boken Accuracy and Reliability in Scientific Computing, SIAM, 2005. Av Bo Einarsson. 7 november 2014 Sida 6 / 21
Datoraritmetik och Beräkningsfel Exempel Då vi lagrar tal i ett flyttalssystem gör vi ett avrundningsfel. Antag att talet x = 573.672 skall lagras i talsystemet (10, 3, 9, 9). Hur stort fel kommer vi att göra? Exempel Antag att vi vill addera x = 34.23 och y = 85.28. Vad är den bästa tänkbara gränsen för beräkningsfelet om vi räknar i talsystemet (10, 3, 9, 9)? 7 november 2014 Sida 7 / 21
Avrundningsfel i Flyttalssystem Sats Då ett tal x lagras i flyttalssystemet (β, t, L, U) görs ett relativt fel högst x x r 1 x 2 β t, där x r är det tal i talsystemet som ligger närmast x. Definition Konstanten µ = 1 2 β t kallas talsystemets avrundningsenhet. 7 november 2014 Sida 8 / 21
Aritmetriska Operationer i Flyttalssystem Antag att vi räknar i talsystemet (β, t, L, U). Då gäller Sats Då en aritmetrisk operation x y utförs gäller att x y fl[x y] x y µ där fl[x y] resultatet beräknat inom talsystemet, och µ är avrundningsenheten. Operationen betyder +,,, eller /. Tolkning Räkna först exakt och avrunda svaret till flyttalssystemet. Det går att implementera standard funktioner exp(x), log(x), x,..., så att de beräknas med relativt fel högst µ. 7 november 2014 Sida 9 / 21
Exempel Vi vill beräkna a + b + c i talsystemet (10, 3, 9, 9) då a = 9.876 10 4, b = 9.880 10 4, och c = 3.456 10 1. Vi kan välja mellan alternativen eller fl[fl[a+b]+c] = fl[fl[ 0.004 10 4 ]+3.456 10 0 ] = fl[ 4.000 10 1 + 3.456 10 1 ] = 5.440 10 0. fl[a+fl[b+c]] = fl[9.876 10 4 9.877 10 4 ] = 1.000 10 1. Gör en beräkningsfelsanalys och avgör vilket alternativ som är bäst. Förutsättning Alla beräkningar inom flyttalssystemet utförs med relativt fel högst avrundningsenheten µ = 0.5 10 3. 7 november 2014 Sida 10 / 21
Beräkningsfelsanalys Vi vill använda MATLAB för att beräkna f(x) = 1+x 1, för små x. 10 0 >>x=10.^-(0:0.01:16); >>f=sqrt(1+x)-1; >>loglog(x,abs(f-f_ex)./f_ex); 10 2 10 4 10 6 10 8 10 10 10 12 10 14 10 16 10 16 10 14 10 12 10 10 10 8 10 6 10 4 10 2 10 0 Gör en beräkningsfelsanalys som förklarar resultatet. 7 november 2014 Sida 11 / 21
10 2 10 0 10 2 10 4 10 6 10 8 10 10 10 12 10 14 10 16 10 16 10 14 10 12 10 10 10 8 10 6 10 4 10 2 10 0 Relativa felet, fl[f(x)] f(x), f(x) = 1+x 1. f(x) och felgränsen f 3µ f x. Kancellation gör att relativa felet växer då x minskar! Hur kan vi åtgärda problemet? Lämplig omskrivning. 7 november 2014 Sida 12 / 21
Flyttalsaritmetik och Beräkningsfelsanalys Viktiga saker att komma ihåg är Kan oftast anta att alla beräkningar utförs med ett relativt fel högst µ. Beräkningsordningen är viktig. Alltså gäller fl[a+(b+c)] fl[(a+b)+c]. Matematiskt ekvivalenta uttryck kan ge väldigt olika resultat. Omskrivningen x 1+x 1 =, 1+x+1 undviker kancellationen. Gör man inga misstag brukar beräkningsfel orsakade av flyttalssystemet vara försumbara jämfört med andra fel. 7 november 2014 Sida 13 / 21
Serier och Resttermsuppskattningar Exempel Vi kan implementera flera standard funktioner genom att använda Taylor utveckling. Exempelvis är e x = 1+x+ x2 2 + x3 6 +... Vi behöver alltså kunna beräkna en summa S på dator. Vi approximerar med en partial summa S N och gör då ett trunkeringsfel R N. Det gäller att S = a k = N a k + a k = S N + R N. k=0 k=0 k=n+1 Hur skall trunkeringsfelet uppskattas? 7 november 2014 Sida 14 / 21
Alternerande serier Definition En serie är alternerande om a k a k+1 < 0, a k > a k+1, lim k a k = 0. S N S a n a n+1 N N+1 N+2 N Sats För en alternerande serie gäller att resttermen kan uppskattas R N a N+1. 7 november 2014 Sida 15 / 21
Exempel Låt S = k=1 ( 1) k 1+k 2. Beräkna summan med 5 korrekta decimaler. Observation Beräkning av alternerande serier kan ge ett stort beräkningsfel på grund av kancellation. Här krävs endast låg noggranhet jämfört med maskin precision µ och beräkningsfelet kan ignoreras. 7 november 2014 Sida 16 / 21
Positiva serier Definition En serier är positiv om a k > 0. Sats Antag att serien S kan skrivas S = f(k), k=0 där f(x) är positiv och monotont avtagande för x > N. Då gäller R N = f(k) f(x)dx. N+1 N 7 november 2014 Sida 17 / 21
Sats Antag att 0 a k b k för k > N. Då gäller R N = a k b k. k=n+1 k=n+1 Exempel Beräkna ett närmevärde till serien 1+k S = 1+k 3 med 5 korrekta decimaler. k=0 7 november 2014 Sida 18 / 21
Exempel - Beräkning avπ Vi vet att, och arctan(x) = x x3 3 + x5 5 x7 7 +... π 8 = arctan( 2 1). Nu vill vi utnyttja detta för att beräkna π med hög precision. Hur skall vi göra? 7 november 2014 Sida 19 / 21
Resttermsuppskattning för alternerande serie ger R N x2n+1 2N + 1 µ = 1 2 2 52 = N 20. Vi kan alltså beräkna en approximation av π med följande MATLAB kod function [Pi]=SeriePi() x=sqrt(2)-1;x2=x^2;s=x;term=x; for k=1:20 Term=-Term*x2;S=S+Term/(2*k+1); end; Pi=8*S; Vi fårπ 3.141592653589794 och felet är ungefär 4 10 16. 7 november 2014 Sida 20 / 21
Sammanfattning Vid flyttalsberäkningar görs ett relativt fel högst µ vid varje operation. Vid beräkning av serier på dator kan vi endast ta med ett begränsat antal termer. Restterms uppskattning viktigt! Vi måste veta att serien konvergerar. Detta kan inte testas på datorn. 7 november 2014 Sida 21 / 21