Flyttalls aritmetikk I datamaskinen er alle tall representert i flyttalls aritmetikk. 1/21 Det betyr at desimal punktet ( float, floating point arithmetic på engelsk) beveger seg slik at store og små tall kan skrives som en tall av moderat størrelse ganget med en potens av et tall som kalles basen, β. I flyttalls aritmetikk, er et vilkårlig tall x er representert som ( x = ± d 0 + d 1 β + d 2 β + + d ) t 1 2 β + β e, t 1 hvor 0 d i β 1, i = 0, 1,....
Eksempler: 1) x = 102.345, β = 10 x = ( 1 + 2 10 + 3 2 10 + 4 3 10 + 5 ) 10 2 4 10 5 2/21 2) x = 6.25, β = 2, x = (110.01) 2 = (1.1001) 2 2 2 = (1 + 12 + 12 ) 2 2 4 3) x = 102.345, β = 2. x = (1100110.010110...) 2 = (1.100110010110...) 2 2 6 ( = 1 + 1 2 + 1 2 + 1 4 2 + 1 5 2 + 1 8 2 + 1 ) 10 2 + 2 6. 11
Flyttall system: 3/21 I maskinen: En flyttall system er definert med 4 heltall: β:= base t:= presisjon L, U := maksimum og minimum tillatt eksponent ( x = ± d 0 + d 1 β + d 2 β + + d ) t 1 β e, 2 β t 1 hvor 0 d i β 1, i = 0, 1,..., t 1. L e U.
d 0 d 1 d t 1 kalles mantisse e kalles eksponent eller karakteristikk d 1 d 2 d t 1 kalles fraksjonen 4/21 Fortegn, mantisse, og exponenten er lagret i forskjellige celler av flyttalls ordet. I IEEE Single Precision aritmetikk (β = 2), vi har 32 slike celler, hvorav den første brukes til fortegn, 8 til eksponenten og de 23 siste brukes til mantissen. (hidden bit) System β t L U IEEE SP 2 24-126 127 (32-bit) IEEE DP 2 53-1022 1023 (64-bit) Cray 2 48-16383 16384 HP calculator 10 12-499 499 IBM mainframe 16 6-64 63 Idag er IEEE SP og IEEE DP den standard aritmetikk som brukes i de fleste maskiner. IEEE er også utviklet så den takler unntaks situasjoner (som deling med null) på en nokså fornuftig måte.
Normaliserte tall Def. Et flyttalls system kalles normalisert hvis det ledende siffer d 0 er ikke null. 5/21 Hvis et tall er normalisert, er mantissen m slik at 1 m β. Flyttall systemer er som oftest normalisert fordi: representasjonen er unik det blir ikke brukt ekstra plass til nuller, og dermed er presisjonen øket i binær systemer (β = 2) er det ledende tall alltid 1 og trengs derfor ikke å lagres. Systemet har dermed en ekstra bit til presisjonen.
Egenskaper til flyttall systemer Flyttall systemer kan bare representere et endelig og diskret antall tall. Hvor mange? 6/21 fortegn: 2 (±, representert som 0, 1 i maskinen) ledende siffer i mantissen: β 1, husk: 0 d 0 β 1, + normalisering 1 d 0 β. andre t 1 siffer i mantissen: β t 1 eksponenten: (U L + 1) mulige verdier null: er representert som 00000000000000 Totalt = 2(β 1)β t 1 (U L + 1) + 1.
Andre mulige tall er: Underflow level, UFL: β L 1 min eksp 00000000000000 det minste positive normaliserte flyttall Overflow level, OFL: β U+1 (1 β t ), 7/21 x max eksp (β 1)i mantisse sifrene (flere). Tall som er større enn OFL eller mindre enn UFL kan ikke representers i dette partikulære systemet.
Flyttall er ikke fordelt uniformt over tallinjen 8/21 Tallene har lik avstand bare mellom to følgende potenser av β. De (endelig antall) tall som kan representeres eksakt i et gitt flyttall system kalles maskintall.
Avrunding Hvis et reelt tall ikke kan representeres eksakt som flyttall, må det approksimeres med et nært maskintall. x reelle tall fl(x) flyttall approksimasjon. 9/21 Denne prosessen kalles avrunding og den introduserte feilen kalles avrundingsfeil eller roundoff error. De to mest brukte metoder er: Chopping, hogging: det β-base tallet av x er trunkert etter t 1 siffer (avrunding mot null) Round to nearest, avrund til nærmest: det flyttall som er nærmest til x. Hvis i tvil, brukes det tall som slutter med et jevne (even) siffer (avrunding til even).
Eksempler 0) x = 1.56, β = 10, t = 2 Tallet er allrede normalisert 10/21 chop: fl(x) = 1.5 round to nearest: fl(x) = 1.6 1) x = 102.345, β = 10, t = 5 I normalisert form: x = 1.02345 10 2 chop: fl(x) = 1.0234 10 2 round to nearest: fl(x) = 1.0234 10 2. (vi har brukt round to even regelen).
2) x = 6.25, β = 2, t = 4. I normaliserte binær form: x = (1.1001) 2 2 2 chop: fl(x) = (1.1) 2 2 2, round to nearest: fl(x) = (1.1) 2 2 2 (round to even) 3) x = 102.345, β = 2, t = 5 I normaliserte binær form: x = (1.10011...) 2 2 6 11/21 chop: fl(x) = (1.1001) 2 2 6 round to nearest: fl(x) = (1.1010) 2 2 6. Avrunding til nærmest er den mest presise men det er koster litt mer å implementere. IEEE standard systemer bruker avrunding til nærmest.
Maskinpresisjon Husk relasjonen mellom appr.verdi og relativ feil: ˆx = x(1 + δ), δ kan være avhenging av x. Unit roundoff: er det (minste) tallet u slik at δ := rel. feil. 12/21 δ u. Unit roundoff er den maksimum relativ feil maskinen kan gjøre i lagring av alle mulige flyttall. Machine precision (maskinpresisjon) ɛ mach : Minste flyttall slik at fl(1 + ɛ mach ) > 1. Maskinpresisjonen er avhenging av benyttet avrundings metode: chopping: ɛ mach = β 1 t, rounding: ɛ mach = 1 2 β1 t
Som oftest antar man at u ɛ mach. 13/21 IEEE SP: ɛ = 2 24 10 7 (7 signifikante siffre) IEEE DP: ɛ = 2 53 10 16 (16 signifikante siffre).
Subnormale tall Husk fordelingen av flyttall: 14/21 Det finnes ingen flyttall mellom 0 og ±β L. Hullet mellom 0 og den minste flyttall skyldes normalisering. Hvis vi tillater ledende siffer å være 0, kan hullet rundt 0 fylles med ekstra flyttall. Slike flyttall kalles denormaliserte og lagres på en spesiell måte: fortegnsiffer 0000... 00000xyz.. Denormaliserte tall har mindre presisjon enn vanlige flyttall.
Eksepsjonelle tall IEEE standard har to ekstra spesielle tall som brukes til eksepsjonelle andeledninger: Inf, infinity, som resultat av divisjon med null, f.eks. 1/0 NaN, Not a number, som resultat av ubestemte operasjoner, lik som 0/0, 0 Inf eller Inf/Inf. 15/21 De er representert ved hjelp av spesielle siffer i eksponentenes celler: Inf: ±1 i fortegnet, 111.. (U + 1) i eksponentenes celler og 0000000... i mantissen NaN: ±1 i fortegnet, 111.. (U + 1) i eksponentenes celler og vilkålige siffer i mantissen De er veldig greie i den forstand at de hjelper software å takle eskepsjonelle situasjoner istedet for å midlertidig abortere. MATLAB propagerer Inf, NaN ifølge visse regler: x Inf = sign(x) Inf, x ± Inf = ±Inf, 0 Inf = NaN ±Inf Inf = ±Inf ±Inf NaN = NaN x NaN = NaN, x ± NaN = NaN
Om flyttall aritmetikk Addisjon/subtrasjon: 16/21 For å legge sammen eller subtrahere to flyttal, må man først omskrive dem til samme eksponent og så legge sammen eller subtrahere mantissene Eks: β = 10, t = 4. Addisjon: x 1 = 1.234 10 6, x 1 = 1.234 10 6, x 2 = 3.456 10 8 x 2 = 0.003456 10 6 Nå kan mantissene legges sammen, x 1 + x 2 = 1.2437456 10 6 1.244 10 6 (med 4 siffer). Den flytting av siffer gjør at vi har nesten mistet all informasjonen om x 2. Summe/subtrasjon av to t-siffer tall er ett flyttall som har mer enn t siffer Alle de ekstra siffer er mistet når tallet avrundes Worst case scenario: alle sifre i det minste tall kan gå tapt.
Multiplikasjon: Når to flyttall multipliseres, behøver deres eksponenter ikke være like: eksponentene summeres mantissene multipliseres. 17/21 Som oftes har det nye flyttallet en 2t-siffret mantisse. Da kan tallet avrundes til t siffer. Eks: β = 10, t = 4. x 1 = 1.234 10 6, x 2 = 3.456 10 8 x 1 x 2 = (1.234 3.456) 10 14 = 4.264704 10 14 4.264 10 6 (med 4 siffer). Vi må desverre ignorere halvparten av siffrene av det reelle produkt.
Divisjon: Til og med divisjon av to flyttall kan gi et resultat som ikke kan representeres eksakt. Eks: 1, 10 kan representeres eksakt i binær form, men 1/10 kan ikke (uendelig siffer) 18/21 Aritmetikk med flyttall gir ikke nødvendigvis flyttall som kan representeres eksakt på maskinen. I så fall må tallet avrundes. Siden flyttall ikke er jevnt fordelt, så er absolutt feilen ikke uniform, men relativ feilen kan begrenses av u (evt. ɛ mach ). Ideelt: x flop y = fl(x op y) IEEE standard følger denne regel så langt at x, y er i flyttall system range. Merk at: noen operasjoner kan være kommutative men ikke assosiative.
Kansellasjon Dette er et alvorlig problem som kan skje når vi subtraherer to tall som er nesten like. 19/21 Eksempel: ˆx = 4.0027, ŷ = 4.0047, ɛ mach = 0.5 10 4. Regn ut maksimum absolutt feil maksimum relativ feil i y x. Kansellasjonsfeil kan ofte unngåes med hjelp av analyse (omskriving av problemet).
Eksempel: kvadratisk formel 20/21 ax 2 + bx + c = 0 x = b ± b 2 4ac 2a
Eksempel: endelig differense approksimasjon f (x) f(x + h) f(x) h 21/21