23.02.2014 Views

Datoraritmetik - Institutionen för informationsteknologi

Datoraritmetik - Institutionen för informationsteknologi

Datoraritmetik - Institutionen för informationsteknologi

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!