Datoraritmetik - Institutionen för informationsteknologi
Datoraritmetik - Institutionen för informationsteknologi
Datoraritmetik - Institutionen för informationsteknologi
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Från labben<br />
<strong>Datoraritmetik</strong><br />
Beräkningsvetenskap I<br />
Informationsteknologi<br />
• Två huvudtyper av fel: diskretiseringsfel och<br />
avrundningsfel<br />
• Olika sätt att mäta fel: relativt fel, absolut fel<br />
• Begreppen ε M , Inf, NaN, overflow, underflow,<br />
diskretisering<br />
• Beräkningen A -1 A blev inte riktigt enhetsmatrisen<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
Från labben<br />
Några exempel<br />
Informationsteknologi<br />
• Numerisk beräkning av derivata med<br />
f ( x h) f( x)<br />
y′ + −<br />
≈<br />
h<br />
Informationsteknologi<br />
Uttryck exakt i Matlab<br />
cos(<br />
π<br />
) 0<br />
2<br />
6.1232e- 017<br />
0.42 − 0.5 + 0.08 0 −1.3878e- 017<br />
0.08 + 0.42 − 0.5 0 0<br />
A<br />
− 1<br />
⋅<br />
A<br />
I Se lab<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
Informationsteknologi<br />
Hur mäter man fel?<br />
• Det exakta talet betecknas x<br />
Samma tal men som innehåller fel betecknas<br />
• Felen kan t ex vara avrundningsfel eller mätfel<br />
• Felet kan mätas<br />
Absolut fel:<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
Relativt fel:<br />
• Om x är en vektor blir det istället<br />
Absolut fel:<br />
i<br />
x − xˆ<br />
x − xˆ<br />
Relativt fel:<br />
x − xˆ<br />
x<br />
x − xˆ<br />
x<br />
kallas för norm. Mer om detta senare.<br />
ˆx<br />
Informationsteknologi<br />
Hur mäter man fel?<br />
Exempel från labben:<br />
• Du köper varmkorv en lördagkväll. Den kostar 15<br />
kr, men av misstag betalar du 20 kr.<br />
Absolut fel: 15 − 20 = 5<br />
15 − 20<br />
Relativt fel: ≈ 0.333 = 33.3%<br />
15<br />
• Du köper en ny bil för 299995 kr, men betalar<br />
300000 kr och bryr dig inte om växeln.<br />
Absolut fel: 299995 − 300000 = 5<br />
5<br />
Relativt fel: 0.0000166 0.0017%<br />
299995 ≈ ≈<br />
• Man förlorar lika mycket, men det känns sannolikt<br />
mindre i det andra fallet. Relativt fel upplevs ofta<br />
som mer korrekt än absolut fel<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
1
Informationsteknologi<br />
Representation av tal i dator<br />
• Alla tal lagras i ett begränsat antal bitar i minnet,<br />
vanligen i binär form. Exempel:<br />
0<br />
1<br />
0<br />
1<br />
betyder (01011100) 2 = 0·2 7 + 1·2 6 + 0·2 5 +<br />
+ 1·2 4 + 1·2 3 + 1·2 2 + 0·2 1 + 0·2 0 = (92) 10<br />
• Lagring i dator<br />
Heltal<br />
Inga problem. Heltal upp till en viss storlek (beroende på<br />
antalet bitar) lagras exakt.<br />
Reella tal<br />
Kan inte lagras exakt utan måste avrundas.<br />
Representationen av reella tal kallas flyttalsrepresentation<br />
och talen kallas flyttal.<br />
1<br />
1<br />
0<br />
0<br />
Informationsteknologi<br />
Representation av reellt tal<br />
Exempel (bas β = 10)<br />
• Reella talet x=0.6666 kan skrivas<br />
x = 0.06666…= 6.6666…·10 2 =<br />
= (6·10 0 + 6·10 -1 + 6·10 -2 + 6·10 -3 + …)·10 2<br />
d 0 d 1 d 2<br />
d 3 β<br />
kallas mantissa m<br />
bas β<br />
Observation 0 ≤ d i < 10 och 1 ≤ |m|< 10<br />
Flyttal – ”flytande” decimalpunkt<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
Informationsteknologi<br />
Representation av reellt tal<br />
Slutsats<br />
• Reellt tal x kan skrivas (i exakt representation)<br />
x = m·β e<br />
där β är den bas som används, e är exponenten<br />
och m är mantissan.<br />
• För mantissan gäller att m = ±(d 0 .d 1 d 2 … ) =<br />
= ±(d 0 β 0 +d 1 β -1 +d 2 β -2 + … ) , 0 ≤ d i < β<br />
• Om man flyttar decimalpunkten så att första<br />
termen d 0 ≠ 0 kallas detta normaliserad form. Då<br />
blir 1 ≤ |m|< β<br />
Informationsteknologi<br />
Representation av reellt tal<br />
• Hur ska reella talet kunna representeras i datorns<br />
begränsade antal bitar?<br />
Exponenten kan lagras exakt upp till en viss storlek<br />
Mantissa måste kapas på något sätt eftersom oändligt<br />
antal siffror – görs genom avrundning<br />
• När det reella talet x lagras i datorn görs det som<br />
flyttal, betecknas fl(x)<br />
• Exemplet igen<br />
Antag plats för 3 tal i datorns mantissa<br />
x=0.6666 ger<br />
fl(x) = 6.667 ·10 2 =<br />
= (6·10 0 + 6·10 -1 + 6·10 -2 + 7·10 -3 )·10 2<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
Informationsteknologi<br />
Representation av reellt tal<br />
Slutsats<br />
• Ett flyttal fl(x) kan skrivas (i normaliserad form)<br />
e<br />
fl() x = mˆ<br />
⋅ β , mˆ<br />
=± ( d0. d1d 2, …, d p −1)<br />
där 1 ≤ di<br />
< β, d0<br />
≠0,<br />
l ≤e≤u<br />
talet 0 representeras på särskilt sätt<br />
• Ett flyttalssystem karaktäriseras av (β,p,l,u)<br />
p kallas precision, mantissan rundas av<br />
Exponenten e är heltal och lagras exakt inom undre och<br />
övre gräns, l och u.<br />
ˆm<br />
• Lagras: och e. β är fixt och lagras ej.<br />
Vanligen β = 2<br />
Informationsteknologi<br />
Representation av reellt tal<br />
Exempel, ett litet flyttalssystem<br />
• (β,p,l,u) = (2,3,0,2)<br />
Mantissan ˆm kan anta följande positiva värden<br />
(motsvarande för negativa tal):<br />
(1.00) =<br />
4<br />
(1.01) =<br />
5<br />
(1.10) =<br />
6<br />
(1.11) =<br />
7<br />
4 4 4 4<br />
För olika värden på exponenten e fås då<br />
e = 0<br />
4<br />
= 1.0<br />
5<br />
= 1.25<br />
6<br />
= 1.5<br />
7<br />
= 1.75<br />
4 4 4 4<br />
min<br />
e = 1<br />
8<br />
= 2<br />
10<br />
= 2.5<br />
12<br />
= 3<br />
14<br />
= 3.5<br />
4 4 4 4 max<br />
e = 2<br />
16<br />
= 4<br />
20<br />
= 5<br />
24<br />
= 6<br />
28<br />
= 7<br />
4 4 4 4<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
2
Representation av reellt tal<br />
Exempel, ett litet flyttalssystem<br />
Representation av reellt tal<br />
Exempel, ett litet flyttalssystem<br />
Informationsteknologi<br />
0 1 2 3 4 5 6 7<br />
+++<br />
+ + + + + + + +<br />
e=0<br />
underflow<br />
e=1<br />
e=2<br />
underflow<br />
Flyttalen ej jämnt representerade – större<br />
tal ger glesare representation<br />
När ett reellt tal ska lagras i datorns minne,<br />
avrundas det och hamnar på närmaste linje<br />
på tallinjen<br />
Informationsteknologi<br />
0 1 2 3 4 5 6 7<br />
+ ++ ++ * + + + + * + + * +<br />
Några tester<br />
2.2 + 4.5:<br />
fl( fl(2.2)+fl(4.5) ) = fl(2.0+4.0) = fl(6.0) = 6.0<br />
Exakt: 6.7<br />
Absolut fel: |6.7-6.0|= 0.7<br />
Relativt fel: |6.7-6.0|/ |6.7|= 0.1045 = 10.45%<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
Representation av reellt tal<br />
Exempel, ett litet flyttalssystem<br />
Representation av reellt tal<br />
Exempel, ett litet flyttalssystem<br />
Informationsteknologi<br />
0 1 2 3 4 5 6 7<br />
+ ++ ++ + + + + + + +<br />
(2.2 + 4.5) - 1.2:<br />
fl(fl( fl(2.2)+fl(4.5) ) - fl(1.2)) = fl(6.0 - 1.25) =<br />
fl(4.75) = 5.0<br />
Exakt: 5.5<br />
Absolut fel: |5.5-5.0|= 0.5<br />
Relativt fel: |5.5-5.0|/ |5.5|= 0.0909 = 9.09%<br />
Informationsteknologi<br />
0 1 2 3 4 5 6 7<br />
+ ++ ++ + + + + + + +<br />
2.2 + (4.5 - 1.2):<br />
fl( fl(2.2)+fl(fl(4.5) - fl(1.2))) =<br />
fl( 2.0+fl(4.0 - 1.25))= fl(2.0+fl(2.75))=fl(2.0+2.5)=<br />
= fl(4.5) = 4.0<br />
Exakt: 5.5<br />
Absolut fel: |5.5-4.0|= 1.5<br />
Relativt fel: |5.5-4.0|/ |5.5|= 0.2727 = 27.27%<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
Representation av reellt tal<br />
Exempel, ett litet flyttalssystem<br />
Representation av reellt tal<br />
Exempel, ett litet flyttalssystem<br />
Informationsteknologi<br />
0 1 2 3 4 5 6 7<br />
+ ++ ++ + + + + + + +<br />
3.3∗(4.5 - 1.2):<br />
fl( fl(3.3) ∗ fl(fl(4.5) - fl(1.2))) =<br />
fl( 3.5 ∗ fl(4.0 - 1.25)) =<br />
fl(3.5 ∗ fl(2.75))=fl(3.5 ∗ 2.5) = Inf pga overflow<br />
Exakt: 10.89<br />
Informationsteknologi<br />
• Om man hamnar under min kan man släppa på<br />
normaliseringskravet<br />
Mantissan ˆm kan anta följande positiva värden<br />
(0.01) =<br />
1<br />
(0.10) =<br />
1<br />
(0.11) =<br />
3<br />
4 2 4<br />
0 1 2<br />
+ + +<br />
subnormala tal<br />
• Ger en liten extraskala under min-gränsen, kallas<br />
subnormalt tal<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
3
Representation av reellt tal<br />
Representation av reellt tal<br />
Informationsteknologi<br />
Hur stort kan felet bli?<br />
Vi tittar först enbart på mantissan:<br />
Maximalt fel i mantissan då talet x ligger exakt<br />
mitt emellan två tal i ˆm .<br />
Mantissan består i exemplet av 1, 1.25, 1.5, 1.75.<br />
Maximalt fel blir då 0.125, dvs |m - |≤ 0.125<br />
Allmänna fallet gäller<br />
Stämmer det för vårt flyttalssystem?<br />
Test: ˆ<br />
1 2<br />
−(3−1)<br />
m−m ≤ = 0.125 Stämmer!<br />
2<br />
ˆm<br />
m−mˆ<br />
≤<br />
1<br />
β − −<br />
2<br />
( p 1)<br />
Informationsteknologi<br />
Hur stort kan felet bli?<br />
Felet i hela talet fl(x) :<br />
• Absoluta felet<br />
1 ( 1)<br />
() ˆ<br />
e e ( ˆ )<br />
e − p −<br />
fl x − x = mβ − mβ = m −m<br />
β ≤ β ⋅β<br />
e<br />
2<br />
Felet beror av storleken på x –glesare<br />
representation högre upp på flyttalslinjen.<br />
• Relativa felet<br />
e e<br />
() ˆ<br />
( 1) e<br />
fl x − x mβ − mβ − p−<br />
1 β ⋅ β<br />
= ≤<br />
1<br />
x<br />
e 2 e ≤<br />
1<br />
β<br />
m β m β 2<br />
− p<br />
Beror inte på talets storlek!<br />
0<br />
m ≥1⋅ β = 1<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
Representation av reellt tal<br />
Representation av reellt tal<br />
Informationsteknologi<br />
Hur stort kan felet bli?<br />
Felet i hela talet fl(x):<br />
• Alltså, vid avrundning gäller<br />
fl()<br />
x − x<br />
1 1 p<br />
≤ ε , där ε<br />
M<br />
M = β<br />
x<br />
2<br />
−<br />
Talet ε M kallas maskinepsilon och är en maskinberoende<br />
konstant<br />
• Maskinepsilon kan även definieras som det<br />
minsta tal ε så att fl(1+ε)>1<br />
• I Matlab ger kommandot eps maskinepsilon, se<br />
lab<br />
Informationsteknologi<br />
Var finns maskinepsilon i flyttalssystemet?<br />
0 1 2 3 4 5 6 7<br />
+ ++ ++ + + + + + + +<br />
underflow<br />
underflow<br />
• ε M - maximala relativa felet mellan ett tal x<br />
och närmaste punkt på tallinjen (dvs storleken<br />
på relativt storleken på talet x)<br />
• Ju ”tätare” tallinje – ju mindre ε M<br />
• ε M har inget med underflow eller overflow, dvs<br />
hur stora/små tal som kan representeras, att<br />
göra<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
Representation av reellt tal<br />
Representation av reellt tal<br />
Informationsteknologi<br />
Avrundningsfel i beräkningsprocesser?<br />
• Maskinepsilon anger maximalt fel vid lagring av<br />
ett tal<br />
• Beräkningsprocesser, t ex Gausselimination<br />
eller A -1 A innehåller mängder av beräkningar<br />
och lagringar, inklusive beräkning med tal som<br />
tidigare avrundats – den sammanlagd effekten<br />
av felen brukar vara lite sämre än ε M<br />
• Vanligen avrundningsfelen små i förhållande till<br />
alla andra fel (diskretiseringsfel, mätnoggrannhet<br />
etc)<br />
Informationsteknologi<br />
Kancellation<br />
• Problem vid subtraktion av nästan lika tal:<br />
Ex) Antag två tal med ”blandat avrundningsskräp”<br />
långt ute i decimalerna.<br />
får beteckna avrundningsskräp<br />
fl(1.21…5423…58 - 1.21…5336…79) =<br />
= fl(0.00…0001 ) = 1. ·10 -k<br />
Avrundningsfel har nästan helt tagit över.<br />
Detta kallas kancellation.<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
4
Informationsteknologi<br />
Representation av reellt tal<br />
Kancellation<br />
• Exempel)<br />
f ( x h) f( x)<br />
Från lab: y′ + −<br />
≈<br />
h<br />
2<br />
p p<br />
− +<br />
⎛ ⎞<br />
q<br />
2 ⎜ −<br />
2⎟<br />
⎝ ⎠<br />
Stora fel när h blir litet<br />
Stora fel när q blir litet<br />
• Kan (i vissa fall) lösas genom att använda<br />
andra formler eller omskrivning<br />
<br />
<br />
f ( x h) f( x h)<br />
y′ + − −<br />
≈<br />
2h<br />
−q<br />
2<br />
p p<br />
+<br />
⎛ ⎞<br />
q<br />
2 ⎜ −<br />
2⎟<br />
⎝ ⎠<br />
fungerar bättre<br />
(uttrycket ovan förlängt med<br />
konjugatet)<br />
Informationsteknologi<br />
Representation av reellt tal<br />
Några konsekvenser<br />
• Ej meningsfullt med tester av typen<br />
if (x==y)<br />
…<br />
end<br />
om x och y är flyttal.<br />
Istället<br />
if abs(x-y)< tol<br />
eller<br />
if abs(x-y)< tol∗abs(x)<br />
• Undvik subtrahera nästan lika stora tal<br />
• Summera om möjligt termer i växande ordning<br />
(t ex när man summerar serier).<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
IEEE flyttalsrepresentation<br />
IEEE flyttalsrepresentation<br />
Informationsteknologi<br />
• Under 60- och 70-talen hade varje datortillverkare<br />
sitt eget flyttalssystem<br />
• En flyttalsstandard utvecklades under tidigt 80-tal<br />
och följdes av tillverkare som Intel och Motorola<br />
• Utvecklat av arbetsgrupp hos Institute for<br />
Electrical and Electronics Enngineerings (IEEE)<br />
• IEEE-standarden har tre viktiga krav:<br />
Konsistent flyttalsrepresentation<br />
Korrekt avrundningsaritmetik<br />
Konsistent hantering av exceptionella situationer<br />
Informationsteknologi<br />
• Tre standartyper av flyttal:<br />
Single precision (enkel precision)<br />
Double precision (dubbel prec)<br />
Extended precision (utökad prec)<br />
• IEEE enkel precision<br />
± e 1 e 2 ⋅⋅⋅ e 8 d 0 d 1 d 2 ⋅⋅⋅ d 22<br />
tecknet 1 bit, exponent 8 bitar, mantissa 23 bitar<br />
• IEEE dubbel precision<br />
± e 1 e 2 ⋅⋅⋅ e 11 d 0 d 1 d 2 ⋅⋅⋅ d 52<br />
tecknet 1 bit, exponent 11 bitar, mantissa 52<br />
bitar<br />
• Behöver d 0 lagras? ”Hidden bit”<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
IEEE flyttalsrepresentation<br />
IEEE flyttalsrepresentation<br />
Informationsteknologi<br />
• Maskinepsilon blir<br />
IEEE single ε M = 2 -23 ≈ 1.2·10 -7<br />
IEEE double ε M = 2 -52 ≈ 1.1·10 -16<br />
IEEE extended ε M = 2 -63 ≈ 1.1·10 -19<br />
• (β,p,l,u) i IEEE-standard<br />
IEEE single (2,24,-126,128)<br />
IEEE double (2,53,-1022,1024)<br />
Obs ”hidden bit”!<br />
Informationsteknologi<br />
• IEEE definierar fem olika ”exceptions”<br />
”Invalid operation”, t ex 0 , 0·∞ => ges värdet NaN<br />
(Not a Number)<br />
0<br />
Division med 0 => sätt till ±∞ (dvs Inf i Matlab)<br />
overflow => sätt till ±∞ eller största flyttal<br />
underflow => sätt till 0 (eller ”subnormalt” tal)<br />
Korrekt avrundning av reella tal (inte exceptionell<br />
situation egentligen)<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
5
Diskretiseringsfel<br />
Diskretiseringsfel<br />
Informationsteknologi<br />
• Förutom avrundningsfel finns även<br />
diskretiseringsfel<br />
Exempel) Numerisk derivering från lab<br />
f ( x h) f( x)<br />
y′ + −<br />
≈<br />
h<br />
När h blir mindre<br />
borde approximationen<br />
bli<br />
bättre – mindre<br />
diskretiseringsfel<br />
Här dominerar<br />
diskretiseringsfel<br />
Informationsteknologi<br />
Tolkning:<br />
• För stora h dominerar diskretiseringsfelet,<br />
man kan bortse från avrundningsfelet<br />
• För små h dominerar avrundningsfelet<br />
• Avrundningsfelet blir stort i det här fallet pga<br />
kancellation i täljaren för små h<br />
division med litet tal förstärker felet i täljaren<br />
• Avrundningsfelet uppför sig ”kaotiskt”, medan<br />
diskretiseringsfelet ger en jämn och snygg<br />
kurva<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
Diskretiseringsfel och<br />
avrundningsfel<br />
Sammanfattning<br />
Informationsteknologi<br />
• Diskretiseringsfelet spelar vanligen den<br />
dominerande rollen. Vanligt att man helt kan<br />
bortse från avrundningsfelen.<br />
• Avrundningsfelet får konsekvenser i vissa fall,<br />
t ex vid kancellation.<br />
• Exakt noll existerar inte i praktiken för flyttal.<br />
Diverse avrundningar gör att tal som kan anses<br />
vara lika ändå skiljer sig ute i decimalerna<br />
• Ett relativt fel i sorleksordningen ε M efter<br />
beräkning med flyttal är enbart slumpmässigt<br />
”skräp”<br />
<strong>Institutionen</strong> för <strong>informationsteknologi</strong> | www.it.uu.se<br />
6