• Darstellung nicht ganzer Zahlen
  • 1) Berechnung des Vorkommateils
  • 2) Berechnung des Nachkommateils
  • Gleitkommadarstellung reeller Zahlen
  • 1) Single precision (32 Bit)
  • Anmerkungen zur Mantisse
  • Anmerkungen zum Exponent
  • 2) Double precision (64 Bit)
  • Zusammenfassend die Merkmale der beiden Grundformate
  • Beispiele zur Umrechnung von Gleitkommazahlen
  • 1) Umwandlung einer normalisierten Gleitkommazahl binär → dezimal
  • 2) Umwandlung einer nicht normalisierten Gleitkommazahl dezimal → binär normalisiert
  • Der Wertebereich vorzeichenbehafteter Zahlen




    Download 106.64 Kb.
    bet7/7
    Sana04.04.2017
    Hajmi106.64 Kb.
    #3013
    1   2   3   4   5   6   7

    Der Wertebereich vorzeichenbehafteter Zahlen:


    8 Bit: -128 bis +127

    16 Bit: -32.768 bis +32.767

    32 Bit: -2.147.483.648 bis +2.147.483.647
    Addition und Subtraktion werden wie mit positiven Zahlen durchgeführt. Bereichsüberschreitung ist durch Überprüfung des Vorzeichenbits möglich (z.B. muss die Addition zweier negativer Zahlen ein negatives Ergebnis liefern, also ein gesetztes Vorzeichenbit).
    Beispiel Addition: -5 + 2 = -3:
    Die negative Zahl „-5“ = in 2er-Komplement Darstellung „11111011“:


    5 =

    00000101

    invertiert 5 =

    11111010

    +1 ergibt 2er Komplement für -5 =

    11111011

    Die zweite Zahl „2“ lautet binär „00000010“. Die Addition kann nun genauso durchgeführt werden wie oben für positive Zahlen beschrieben:




    -5:

    11111011

    +2:

    00000010

    Ergebnis (in 2er-Kompl.Darst.): -3:

    11111101







    Probe: Ergebnis invertiert:

    00000010

    +1:

    00000001

    Normal 3:

    00000011

    Beispiel Subtraktion: jede Subtraktion wird als Addition mit negativem Summanden ausgeführt:


    5 - 8 = 5 + (-8)


    5 =

    00000101







    8 =

    00001000

    invertiert 8 =

    11110111

    +1 ergibt 2er Komplement für -8 =

    11111000




    5

    11111011

    -8

    11111000

    Ergebnis (in 2er-Kompl.Darst.): -3

    11111101







    Probe: Ergebnis invertiert

    00000010

    +1

    00000001

    Normal 3

    00000011

    Beispiel negativer Summand, positives Ergebnis: -3 + 5 = 2




    3 =

    00000110

    invertiert 3 =

    11111001

    +1 ergibt 2er Komplement für -3 =

    11111101







    5 =

    00000101




    2er Komplement -3:

    11111101

    +5:

    00000101

    Ergebnis 2:

    00000010



    Darstellung nicht ganzer Zahlen

    Festkommadarstellung


    Zur Darstellung von nicht ganzen Dezimalzahlen könnte eine feste Anzahl von d Nachkommastellen berücksichtigt werden, Diese Art der Darstellung wird als Festkommadarstellung („fixed point representation“) bezeichnet. Da der Dezimalpunkt immer an derselben Stelle liegt, braucht dieser nicht mitgespeichert werden.
    Beispiel 1 (Umwandlung binär → dezimal):
    Die Binärzahl 1001.0011 verwendet je 4 Bits für Vor- und Nachkommateil und soll ins Dezimalsystem umgewandelt werden.

    1) Berechnung des Vorkommateils


    Die Vorkommastellen ergeben dezimal „9“ (23 + 20): jede Ziffer besitzt bekanntlich einen Stellenwert. Der Vorkommateil errechnet sich aus BasisNummer der Ziffer (mit 0 beginnend), d.h. im Binärsystem 20 für die 1.Stelle, 21 für die zweite usw. Für unser Beispiel (4 Vorkommastellen) ergeben sich folgende Stellenwerte:


    Nummer der Ziffer:

    3

    2

    1

    0

    Stellenwert:

    23 = 8

    22 = 4

    21 = 2

    20 = 1

    Der Wert des Vorkommateils beträgt somit dezimal 1 ∙ 23 + 0 ∙ 22 + 0 ∙ 21 + 1 ∙ 20 = 8 + 0 + 0 + 1 = 910


    2) Berechnung des Nachkommateils


    Der Stellenwert der Nachkommastellen errechnet sich aus Basis-Nummer der Ziffer (Zählung beginnt mit -1), d.h. im Binärsystem 2-1 für die erste Nachkommastelle, 2-2 für die zweite, usw. Für die ersten 4 Nachkommastellen ergeben sich daher:
    1.Nachkommastelle 2.Nachkommastelle 3.Nachkommastelle 4.Nachkommastelle


    Der Wert des Nachkommateils beträgt somit für unser Beispiel:

    Ergibt zusammen (Vor- und Nachkommastellen) 9 + 0,1875 = 9,1875
    Beispiel 2 (Umwandlung dezimal → binär):
    Die Umwandlung einer nicht ganzen Dezimalzahl in das Binärsystem kann auf folgende Weise erfolgen:


    • Der ganzzahlige Anteil wird wie üblich durch fortlaufende Division durch 2 in das Binärsystem übertragen (s.Anleitung „Binärsystem für die 5.Klasse“).

    • Der nicht ganzzahlige Anteil wird fortlaufend mit 2 multipliziert. Vom Produkt jeder Multiplikation bildet der ganzzahlige Anteil die zugehörige Binärziffer.

    Beispiel:


    Die Dezimalzahl 25,7 soll in das Binärsystem umgewandelt werden. Für den ganzzahligen Anteil (25) liefert die fortlaufende Division durch 2:














    Binärzahl

    25:2

    =

    12

    Rest = 1

    1

    12:2

    =

    6

    Rest = 0

    0

    6:2

    =

    3

    Rest = 0

    0

    3:2

    =

    1

    Rest = 1

    1

    1:2

    =

    0

    Rest = 1

    1

    Der Vorkommateil ergibt somit binär 11001


    Der nichtganzzahlige Anteil (0,7) wird fortlaufend mit 2 multipliziert, der ganzzahlige Anteil des Produkts bildet die Binärziffer, mit dem nichtganzzahligen wird im nächsten Schritt weitergerechnet:











    Ganzzahliger Anteil =
    Binärziffer

    0,7·2

    =

    1,4

    1

    0,4·2

    =

    0,8

    0

    0,8·2

    =

    1,6

    1

    0,6·2

    =

    1,2

    1

    0,2·2

    =

    0,4

    0

    0,4·2

    =

    0,8

    0 (ab hier periodisch)

    Der Nachkommateil ergibt somit 101100 ... Wie das Beispiel zeigt, können selbst einfach Dezimalbrüche auf endlose (periodische) Binärbrüche führen. Die Darstellung nicht ganzer Zahlen im Binärsystem ist daher nur in wenigen mit beschränkter Stellenanzahl exakt möglich.


    Gleitkommadarstellung reeller Zahlen


    Wer die Festkommadarstellung wählt, muss man eine erhebliche Verschwendung von Speicherplatz in Kauf nehmen. Eine Zahl wie 2311456,3 z.B. benötigt viele Vorkomma-, aber wenig Nachkommastellen. Umgekehrt verhält es sich bei Zahlen wie 0,0023444536. Festkommadarstellung kann nicht flexibel darauf reagieren und lässt entweder auf der Vorkomma- oder der Nachkommaseite Stellen ungenützt. Damit wird auch der mögliche Wertebereich stark eingeschränkt. Aus diesen Gründen wurde mit der Gleitkommadarstellung („floating point representation“)1 eine Darstellung mit variabler Kommastelle (variablem Skalierungsfaktor) definiert, die aus Mantisse und Exponent besteht:


    Exponent

    Mantisse

    z.B. 61,753 6,1753*101

    Da mehrere gleichwertige Darstellungen möglich sind (für 61,753 z.B.: 61,753 · 100 oder 6,1753 · 101 oder 0,61753 · 102 oder 617,53 · 10-1, ...), wurde eine sog. „normalisierte“ Form als Standard festgelegt, die folgende Forderung stellt:




    • Der Skalierungsfaktor wird so gewählt, dass das Komma so weit wie möglich nach links verschoben wird, dabei aber ...

    • ... die erste Stelle der Mantisse immer ungleich 0 ist

    Allgemein formuliert gilt für eine normalisierte Mantisse m in einem Zahlensystem zur Basis b: 1 ≤ m < b. Die Position des Kommas wird allerdings nirgends gespeichert! Die gespeicherte Mantisse selbst enthält immer eine Ganzzahl. Natürlich muss die Recheneinheit, sobald sie mit dieser Zahl rechnen soll, wissen, wo das Komma zu setzen ist. Aber dessen Position ergibt sich ja aus dem Wert des Exponenten. Für unser Beispiel (61,753) bedeutet das: Exponent = 1, Mantisse = 61753 (ergibt 6,1753 · 101). Positiver Exponent bedeutet: das Komma muss nach rechts verschoben werden, negativer Exponent bedeutet: Komma muss nach links verschoben werden. Einige Beispiele für normalisierte Gleitkommazahlen:







    normalisiert

    Exponent

    Mantisse

    27897,221

    2,7897221 · 104

    4

    27897221

    334782245985,3

    3,347822459853 · 1012

    12

    3347822459853

    0,0043551

    4,3551 · 10-3

    -3

    43551

    0,000000006533

    6,533 · 10-9

    -9

    6533

    Wie man sieht, liegt ein besonderer Vorteil der normalisierten Darstellung darin, dass führende Nullen nicht mitgespeichert werden müssen. Für Binärzahlen (Basis b = 2) ergibt die genannte Normalisierungsregel 1 ≤ m < 2, die Mantisse liegt also immer zwischen 1 und 2. Der heute gültige Standard sieht zwei Grundformate vor, die allgemein unterstützt werden. Beiden gemeinsam ist der dreiteilige Aufbau: das erste Bit enthält das Vorzeichen, danach folgt der Exponent, zuletzt die Mantisse:


    1) Single precision (32 Bit)


    v

    e7 ... e0

    m1 ... m23




    23 Bit:

    Mantisse (Zählung beginnt links!)



    8 Bit:

    Exponent


    1 Bit:

    Vorzeichenbit der Mantisse




    Anmerkungen zur Mantisse


    Auffällig das Fehlen des 1.Bits der Mantisse (das erste gespeicherte Bit ist nicht m0 sondern m1): da Binärziffern nur „0“ oder „1“ sein können, andererseits die Normalisierungsbedingung m0 ≠ 0 an der ersten Stelle die „0“ verbietet, bleibt dafür nur mehr „1“ übrig und braucht deshalb nicht explizit gespeichert zu werden (sog. „implizites erstes Bit“ oder „hidden bit“). Damit gewinnt man ein zusätzliches Bit für die Mantisse (und erhöht die Genauigkeit). Es stehen somit insgesamt 24 Bit (1 impliziertes und 23 explizit gespeicherte) für die Mantisse zur Verfügung. Natürlich kann die Mantisse (und damit die gesamte Gleitkommazahl) negativ sein. Das wird aber nicht in der Mantisse selbst, sondern durch das Vorzeichenbit (das erste Bit der gesamten Gleitkommazahl) angezeigt. Die gespeicherte Mantisse selbst ist daher immer positiv (und stellt den Nachkommateil der Mantisse (den Bruch = „fraction“, daher oft „f“ abgekürzt) dar.

    Anmerkungen zum Exponent


    Der Exponent umfasst 8 Bit und kann selbstverständlich ebenfalls negativ sein. Ein negativer Exponent wird jedoch nicht in 2er-Komplementdarstellung codiert, sondern in der „Exzess“-Darstellung (s.o.S.2), wobei die 0 zur negativen Seite gerechnet wird. Daher ist der niedrigstmögliche Wert -127, der höchste +128, folglich der Exzess = +127 (der Exzess wird im Zusammenhang mit Gleitkommazahlen auch „Bias“ genannt). Die beiden Grenzwerte sind allerdings für besondere Zwecke reserviert (s.u.), daher verbleiben emin = -126 und emax = +127.
    Bleibt noch die Frage, wie denn der Wert „0“ dargestellt wird. Denn aufgrund der Normalisierungsbedingung m0 ≠ 0 muss die erste Stelle der Mantisse immer „1“ sein und damit auch die gesamte Gleikommazahl immer ≠ 0 (egal, welchen Exponent e man wählt: 1∙ 2e ergibt niemals 0). Als Lösung sieht der Standard vor, dass eine Gleitkommazahl als „0“ zu interpretieren ist, wenn zwei Bedingungen erfüllt sind:


    • der Exponent = emin-1 (für Single precision = -127)

    • alle Stellen der Mantisse ab der 2.Stelle = 0 (d.h. alle sichtbaren sind 0, da das erste Bit ja nicht gespeichert wird)

    Sehen wir uns die Codierung der Gleitkommazahl „0“ näher an: da als Exzess des Exponenten +127 definiert ist, wird im Exponent gemäß oben genannter Bedingung emin-1 + 127 = 0 gespeichert. Da außerdem das erste Bit der Mantisse (= immer 1) nicht explizit gespeichert wird, bleibt auch für die Mantisse der Wert 0 übrig. Ergibt als Bitmuster der gesamten Gleitkommazahl lauter 0 (vorausgesetzt, das Vorzeichenbit2 ist ebenfalls 0). Maschinell ist dadurch eine sehr einfache und schnelle Überprüfung auf „größer/kleiner/gleich 0“ möglich.


    2) Double precision (64 Bit)


    v

    m10 ... m0

    m1 ... m52




    11 Bit:

    Exponent


    52 Bit:

    Mantisse (Zählung beginnt links!)



    1 Bit:

    Vorzeichenbit der Mantisse


    Wegen des impliziten Bits stehen für die Mantisse tatsächlich 53 Bit zur Verfügung. Als Exzess ist +1023 festgelegt.




    Zusammenfassend die Merkmale der beiden Grundformate:





    single precision

    double precision

    Gesamtanzahl Bits

    32

    64

    Bits für Mantisse

    23 (24)

    52 (53)

    Genauigkeit

    ≈ 7 Dezimalstellen

    ≈ 16 Dezimalstellen

    Bits für Exponent

    8

    11

    emin

    -126

    -1022

    emax

    +127

    +1023

    Exzess („Bias“)

    127

    1023

    Kleinste (positive) Zahl

    2-126 ≈ 1,2∙ 10-38

    2-1022 ≈ 2,2∙ 10-308

    Größte Zahl

    (2-2-23)∙ 2127 ≈ 3,4∙ 1038

    (2-2-52)∙ 21023 ≈ 1,8∙ 10308

    Für normalisierte Zahlen ergeben sich folgende mögliche Werte für Exponent e und Mantisse m (= der tatsächlich gespeicherten Mantisse, also ohne hidden bit), wobei der Exponent in Exzess-Codierung (rot) angegeben wird:




    Exponent e: 1 ≤ e ≤ 254

    (emin ≤ e ≤ emax)

    Mantisse: beliebig


    Exponent e: 1 ≤ e ≤ 1023

    (emin ≤ e ≤ emax)

    Mantisse: beliebig


    Der Wert einer normalisierten Gleitkommazahl x errechnet sich unter Berücksichtigung des Vorzeichens v, des Exponent e und der Mantisse m (ohne hidden bit) folgendermaßen:




    x = (-1)v∙ 1,m∙ 2(e – 127)

    x = (-1)v∙ 1,m∙ 2(e – 1023)

    Werte im Exponenten außerhalb emin bzw. emax sind für besondere Zwecke reserviert:


    Codierung der Zahl 0

    e = 0 (= emin - 1), m = 0

    Codierung von denormalisierten Zahlen3

    e = 0 (= emin - 1), m1 ≠ 0

    Codierung von ±„unendlich“ (= Bereichsüber- bzw. unterschreitung)

    e = 255 (= emax + 1), m = 0

    Codierung von ungültiger Zahl („not a number“, „NaN“)

    e = 255 (= emax + 1), m ≠ 0

    Neben diesen Grundformaten wurden noch sog. erweiterte Formate definiert, die aber nicht überall unterstützt werden. Praktische Bedeutung hat vor allem das 80-Bit Format „double extended“, weil die aktuellen CPUs jede Gleitkommazahl intern auf dieses Format erweitern, bevor sie damit rechnen (das fertige Ergebnis muss natürlich wieder auf das ursprüngliche Format reduziert werden).


    Beispiele zur Umrechnung von Gleitkommazahlen


    Wie Vor- und Nachkommateil einer Festkommazahl ins Dezimalsystem umgewandelt wird, ist bereits erklärt worden (s.0.S.5). Für Gleitkommazahlen ist zusätzlich die Verschiebung des Kommas zu beachten. Wir betrachten im Folgenden single-precision-Zahlen nach dem beschriebenen IEEE.754-Standard, d.h. Exponent in Exzessdarstellung (Exzess = 127) und Mantisse ohne impliziertes erstes Bit.

    1) Umwandlung einer normalisierten Gleitkommazahl binär → dezimal

    Beispiel 1


    0

    10000001

    11000000000000000000000

    Vorzeichen = 0, Exponent (Exzessdarstellung) = 10000001, Mantisse = 11


    Der Exponent ergibt dezimal 129. Zieht man den Exzess 127 ab, bleibt 2 – die Mantisse musss folglich mit 22 multipliziert werden.
    Die Mantisse müssen wir für unsere Berechnung um das implizierte Bit erweitern, also 1112. Gemäß der Normalisierungsregel ergänzen wir das Komma hinter dem ersten Bit dieser um das implizierte Bit erweiterten Mantisse. Ergibt 1,112 ∙ 2210. 22 bedeutet, dass das Komma um 2 Stellen nach rechts verschoben werden muss: 1,112 ∙ 2210 = 111,02 = 7,010.

    Beispiel 2


    0

    10000001

    11010000000000000000000

    Vorzeichen = 0, Exponent (Exzessdarstellung) = 10000001, Mantisse = 1101


    Der Exponent ist mit dem des vorangegangenen Beispiels identisch, die Mantisse allerdings verfügt über mehr Stellen. Wir können daher diesmal als Ergebnis eine Zahl mit Kommastellen erwarten.
    Als Erstes das „hidden Bit“ ergänzen: 1101  11101
    Als Zweites das Komma verschieben: 1,1101 ∙ 22 = 111,01
    Wie für die Festkommadarstellung beschrieben, werden Vor- und Nachkommateil getrennt ins Dezimalsystem umgewandelt und anschließend addiert:
    1112 = 910

    0,012 = 0,2510



     9 + 0,25 = 9,25

    2) Umwandlung einer nicht normalisierten Gleitkommazahl dezimal → binär normalisiert

    Beispiel 1 - Vorübung


    Zur Umwandlung sind vier Schritte notwendig. Als Vorübung einige Zahlen, die wir ohne Taschenrechner umwandeln können, da es sich um Potenzen von 2 handelt:


    Dezimalzahl

    Binärzahl als Festkommazahl

    Binärzahl als normalisierte Gleitkommazahl

    8,0000

    1000,0

    1,0 ∙ 23

    4,0000

    100,0

    1,0 ∙ 22

    2,0000

    10,0

    1,0 ∙ 21

    1,0000

    1,0

    1,0 ∙ 20

    0,5000

    0,1

    1,0 ∙ 2-1

    0,2500

    0,01

    1,0 ∙ 2-2

    0,1250

    0,001

    1,0 ∙ 2-3

    0,0625

    0,0001

    1,0 ∙ 2-4

    a) Um den Exponent zu gewinnen, fragen wir, mit welcher Zahl die Basis „2“ potenziert werden muss, um die gegebene Dezimalzahl zu erhalten. Genau dafür gibt es den Logarithmus dualis4:


    x = ld(8) = 3,0

    x = ld(0,125) = -3,0

    x = ld(1) = 0
    b) Beispiel 8,0: ld(8) = 3,0. Der Exponent lautet demnach „3“, d.h. das Komma muss um drei Stellen verschoben werden, damit, wie es die Normalisierung fordert, das Komma hinter der ersten „1“ steht:
    810 = 10002 → 8,010 = 1,000 ∙ 23
    In diesem Beispiel gibt es keine Nachkommastellen, da 8 eine glatte Potenz von 2 ist.
    c) Falls Nachkommastellen vorhanden sind, werden sie genauso ins Binärsystem übertragen, wie zur Festkommadarstellung erklärt (s.o.S.6).
    d) Zuletzt nur mehr die so erhaltene Gleikommazahl an den single-precision Standard anpassen (erstes Bit der Mantisse verstecken, Mantisse auf 23 Bit auffüllen und Exponent in Exzessdarstellung übertragen. Exzess in unserem Beispiel: 3 + 127 = 13010 = 100000102


    0

    10000010

    10000000000000000000000



    Beispiel 2


    4,75 soll in eine binäre normalisierte Gleitkommazahl umgewandelt werden. Diesmal gibt es Nachkommastellen.
    a) ld(4) = 2,0. Exponent ist demnach 210

    b) Mantisse (inkl. hidden Bit) ins Binärsystem übertragen: 410 = 1002;

    c) Da der Exponent „2“ lautet, ist das Komma um 2 Stellen zu verschieben: 1002  1,002; ergibt vorläufige Binärzahl ohne Berücksichtigung des Nachkommateils: 1,0 ∙ 22
    d) Der Nachkommateil 0,75 wird durch fortlaufende Multiplikation mit 2 ins Binärsystem übertragen:











    Ganzzahliger Anteil =
    Binärziffer

    0,75·2

    =

    1,5

    1

    0,5 ·2

    =

    1,0

    1

    0,7510 = 0,112


    e) Nachkommateil hinter das Komma setzen: 100,11. Komma verschieben → ergibt 1,0011 ∙ 22

    f) Exponent in Exzessdarstellung übertragen: 210 + 12710 = 12910 = 100000012



    g) Erstes Bit der Mantisse verstecken und auf 23 Bit auffüllen: ergibt 00001100000000000000000


    0

    10000001

    001100000000000000000

    1 Für Computer 1985 festgelegt von der IEEE („Institute of Electrical and Electronics Engineers“ - „ai-triple-i“ ausgesprochen), einer Gesellschaft, die sich seit 1963 um weltweite elektrotechnische Standards kümmert. Details zu diesem Standard (IEEE.754) s. http://754r.ucbtest.org/standards/754.pdf

    2 tatsächlich sind +0 und -0 möglich. Der Standard schreibt deshalb vor, dass für Vergleichsoperationen (und nur für diese!) +0 und -0 gleich zu behandeln sind (+0 = -0)

    3 Um die Genauigkeit zu erhöhen, erlaubt der Standard denormalisierte Gleitkommazahlen im Bereich zwischen der größtmöglichen normalisierten negativen und der niedrigstmöglichen normalisierten positiven Gleitkommazahl

    4 Mit dem Taschenrechner: log(Dezimalzahl) / log(2)


    Download 106.64 Kb.
    1   2   3   4   5   6   7




    Download 106.64 Kb.

    Bosh sahifa
    Aloqalar

        Bosh sahifa



    Der Wertebereich vorzeichenbehafteter Zahlen

    Download 106.64 Kb.