Interne Darstellung von Zahlen

Werbung
Interne Darstellung
von Zahlen
Drei Möglichkeiten

Dezimal gepackt → Tetraden (BCD)




Festpunktschreibweise



Jede Ziffer einer Dezimalzahl separat binär kodiert
Gezonte Zahlendarstellung (Extended Binary Coded
Decimal Interchange Code) mit F(=1111) für linkes
Byte
Bsp.: 3210=0011200102
dual
fixed point
Gleitpunktschreibweise


dual
floating point
Festpunktdarstellung


Das Komma ist an einer fixen, vorgegebenen
Stelle (Sonderfall: ganze Zahlen)
Wertebereich durch Anzahl der Stellen für den
ganzen Teil festgelegt:
VZ

ganzer Teil
p
gebrochener Teil
q
mit n-stelligem Binärwort kann man 2n
verschiedene Dualwerte repräsentieren →
betragsmäßig größter darstellbarer Wert:
|2n-1|; z.B. ganze Zahlen in 16Bit-Wort
(-32767…32767)
Gleitpunktdarstellung (1)

Die Zahl F wird über Mantisse und Exponent
(jeweils mit Vorzeichen) beschrieben:

F = ±m·B±e
VZm VZe Exponent e

Mantisse m
Statt Exponent e wird auch Charakteristik c
verwendet (=immer positive Exzessdarstellung
des Exponenten): c = e + k
→ siehe Technische Grundlagen und Systemsoftware
Gleitpunktdarstellung (2)



Darstellung nicht immer eindeutig:
 0,1 = 0,01·101 = 1,00·10-1
Abhilfe: Normalisierung
(erste Ziffer d0 ungleich Null)
Interne Darstellung nach einer
einheitlichen Konstruktionsvorschrift
(Normierung):
1
B  m 1
Gleitpunktdarstellung (3)

Bsp.: Darstellung von 10,5 in einem
32-Bit-Wort:






1 Bit Vorzeichen Mantisse
7 Bit Exponent
24 Bit Mantisse
+10,5
= +(1010,1)2 · 20
= 0,10101 · 24
Mantisse 1010100...0
Exp 4 = 22 = 1002
0 0000100 101010000000000000000000
Gleitpunktdarstellung (4)

1
r
p
VZ
e
M
Betragskleinste normalisiert darstellbare Zahl:



Exponent = -2r-1
Mantisse = 0,5



z  0,5  2  2
q
(  2 r 1 -1)
Betragsgrößte Zahl:



L=1+r+p
Exponent = 2r-1-1 

Mantisse ≈ 1

Wertebereich:
2
( 2r 1 1)
 z 2
(2r 1 1)
z2
q-1
2
(2r 1 1)
r … # Bits für Exponent
-q … minimaler Exponent
q-1 … maximaler Exponent
Gleitpunktdarstellung (5)

Zahlen exakt darstellbar im Bereich:
0z2


p
2p = 10x  …  durch p Bits sind
genau p/ld10 Dezimalstellen darstellbar
Gleitkommadarstellung ist auf
p
3p

 0,3p
ld10 10
Dezimalstellen genau
Gleitpunktarithmetik
Addition (1)
Mantisse und Exponent getrennt behandeln
1.
Anpassung der Zahl mit dem kleineren
Exponenten an die mit dem größeren
Exponenten: Z klein  mklein  2eklein e groß  2e groß  m  2e groß
2.
Mantissen addieren
neue
gemeinsamer
Mantisse
3.
Exponent
Ergebnis normieren (=ev. Verschieben der
Mantisse nach rechts, Exponenten ändern)
Beachte: Durch Angleich der Charakteristiken bzw.
Normierung können im Ergebnis Stellen verloren gehen!
Addition (2)
0,680 · 105
+ 0,748 · 105
1,428 · 105 = 0,142 · 106
od. 0,143 · 106
0,680·105 → 0,680 · 105
+ 0,748·103 → 0,007 · 105
0,687 · 105
1024
→ 0,100000000000000000000000 · 211
+ 0,875 · 10-6 → 0,111010101110000110001010 · 2-20
= 0,000000000000000000000000 · 211
→ 0,100000000000000000000000 · 211
 A+B=A !
Weitere Operationen

Subtraktion:



Multiplikation:



Prozedur wie bei Addition
Normieren bedeutet u.U. Verschieben nach links
(zusätzliche Nullen, vorgetäuschte Genauigkeit!)
Multiplikation der Mantissen,
Addition der Exponenten
Produkt u.U. normieren
Division:


Division der Mantissen, Subtraktion der Exponenten
Quotient u.U. normieren
Gleitkommaformate (1)






Basis β (Annahme: β gerade)
Genauigkeit p
β=10, p=3 → 0,110=1,00·10-1
β=2, p=24 →
0,110≈1,10011001100110011001101·2-4
Die Mantisse (oder Signifikante) hat p Stellen
→βp mögliche Mantissenwerte
±d0,d1d2…dp-1·βe (0≤di<β) stellt folgende Zahl
dar:


 d0  d1β 1    dp 1β (p 1) β e
Gleitkommaformate (2)



Größter bzw. kleinster erlaubter
Exponent: emax, emin → emax-emin+1
mögliche Exponenten
Anzahl der benötigten Bit inkl.
Vorzeichen: log 2 (e max  e min  1)   log 2 (β p )   1
Viele Zahlen nicht exakt darstellbar!


periodische Darstellung
außerhalb des darstellbaren Bereichs
1,0  β
e min
, β β
e max

Relativer Fehler






Differenz von realem und berechnetem Wert,
geteilt durch realen Wert
3,14 statt 3.14159: 0,00159/3,14159≈0,0005
„Normale“ Rundung: Differenz ist höchstens
(β/2)β-p·βe, relativer Fehler schwankt um β:
β
p
p
1
1
β

ulp

β
2
2
2
Obere Grenze (Maschinenepsilon):
ε  β2 β  p
Im Beispiel (β =10, p = 3): ε=0,005
Der relative Fehler von oben ist dann ≈0,1ε
IEEE Standard
für Floating-Point Arithmetic



Single Precision: gesamt 32 Bit Wort
 1 Bit Vorzeichen
 8 Bit Exponent
7
β p
ε

β

1,2

10
 23 Bit Mantisse 
2
Double Precision: gesamt 64 Bit Wort
 1 Bit Vorzeichen
 11 Bit Exponent
16
β p
ε

β

2,2

10
 52 Bit Mantisse 
2
http://www.cs.berkeley.edu/~ejr/Projects/ieee754/,
http://www.psc.edu/general/software/packages/ieee/ieee.html
Probleme mit Größenordnungen



Eine Möglichkeit der Differenzbildung: exakten
Wert bestimmen, anschließend runden
Problem: sehr aufwändig, wenn die
Operanden sehr unterschiedliche Größe haben
p=3: 2,15·1012 - 1,25·10-5:
(2,15 - 0,0000000000000000125)·1012=
2,1499999999999999875·1012 ≈ 2,15·1012

Lösung: Rechnen mit begrenzter
Stellenanzahl (überschüssige Stellen werden
abgeschnitten)
Guard Digits (1)



(2,15 - 0,00)·1012 = 2,15·1012
Gleiches Ergebnis wie bei
aufwändigerer Berechnung
Problem (z.B): 10,1 - 9,93
(1,01 - 0,99)·101 = 2,00·10-1 (richtig:
1,70·10-1)
 jede Stelle ist falsch!

Lösung: eine zusätzliche Stelle
(=guard digit) für die Berechnung
(1,010 - 0,993)·101 = 1,70·10-1
Guard Digits (2)

Im allgemeinen gilt:
Der relative Fehler bei Subtraktion
mit einem guard digit ist stets
kleiner als 2ε
Wegfall von Stellen (Auslöschung)



Ohne guard digit (Berechnung mit p
Stellen) kann der relative Fehler
bis zu β-1 betragen
Es können sogar sämtliche Stellen
bedeutungslos werden
(siehe voriges Bsp.)
Ein anderes Problem tritt auf, wenn nahe
beieinander liegende Werte subtrahiert
werden:


die höchstwertigen Stellen werden eliminiert
übrig bleiben nur niederwertige Stellen
Wegfall (1)


Tritt auf, wenn die Operanden bereits
gerundet sind
Beispiel: quadratische Formel
b2 - 4ac: b2 und 4ac sind wegen GleitkommaMultiplikation bereits gerundet



Jeder Summand hat zwar höchstens 0,5 ulp
Schlimmstenfalls bleiben nach Subtraktion nur
noch Stellen mit Rundungsfehlern übrig
Das führt unter Umständen zu sehr großer
Abweichung !
Wegfall (2)







Beispiel: b=3,34; a=1,22; c=2,28
[β=10, p=3]
Exakter Wert: 0,0292
Aber: b2=11,2 und 4ac=11,1
Also: berechneter Wert = 0,1
Relativer Fehler = 0,708 = 141,6 ε
Beachte: 11,2 - 11,1 ist aber exakt 0,1!
Die Subtraktion hat also nicht direkt zum
Fehler beigetragen, sondern die Fehler der
vorhergehenden Multiplikationen lediglich
offen gelegt
Rundungsarten





Runden ist im allgemeinen sehr einfach
Problem: Werte, die genau in der Mitte liegen
(z.B. 12,5)
Oft werden die Ziffern in zwei gleich große
Bereiche geteilt, wobei von 0 bis 4 abgerundet
und von 5 bis 9 aufgerundet wird (DEC-VAX)
Dies führt aber dazu, dass gerundete Werte
graduell ansteigen
Ein anderer Ansatz sagt, dass Werte, die
genau in der Mitte liegen auch zur Hälfte abund zur anderen Hälfte aufgerundet werden
sollen
Erhöhung der Genauigkeit
Zwei Ansätze:
1.
Verlängerung der Mantisse, gespeichert in
mehreren Wörtern (Array); benötigt
speziellen (Assembler-)Code für den Zugriff
2.
„Splitting“: Speicherung in mehreren
herkömmlichen Gleitkommazahlen, deren
Addition (bei unendlicher Genauigkeit)
wieder die ursprüngliche Zahl ergibt;
Vorteil: kann in Hochsprache programmiert
werden
Matlab: vpa
Herunterladen