1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Gleitkommadarstellung im Dualsystem

Dieses Thema im Forum "Coders Talk" wurde erstellt von lapislazuli, 12. Juli 2004.

  1. lapislazuli

    lapislazuli Grünschnabel

    Hallo

    Ich hoffe, dass mir jemand helfen kann, ich hab' am Mittwoch IT Klausur und muss unbedingt noch verstehen, wie das mit der Umrechnung von Gleitkommazahlen ins Dezimalsystem funktioniert, aus den Unterlagen der Vorlesung werde ich leider nicht ganz schlau. So viel ist aber klar:

    Eine Gleitkommazahl besteht aus drei Teilen: einem Vorzeichen, einer Mantisse und einem Exponenten. z.B. 200 = 1,5625 * 2^7 oder im Dezimalsystem ist 200 = 0,2 * 10^3.

    Wie kommt man nun von dieser Darstellung: 1,5625 * 2^7 auf die Binäre Form und besonders, wie wieder zurück? Wie sieht das bei negativen Zahlen aus?

    Die Binäre Form einer Gleitkommazahl sieht dann z.B. so aus:
    a) 0 10000001 01000000000000000000000
    b) 1 01111001 00000000000000000000000

    beides in einfacher Genauigkeit mit 32 Bit.

    Gruß
    Johannes
  2. squeaker

    squeaker Erfahrenes Mitglied

    so ganz allgemein: eine Kommazahl (z.b. 1.5625) lässt sich schreiben als Reihe von 10er Potenzen, in diesem Fall:

    0*10^1+1*10^0+5*10^(-1)+5*10^(-2)+2*10^(-3)+5*10^(-5)

    Dies sollte offentsichtlich sein. Wenn man nun als Basis 2 statt 10 nimmt, kommt man auf die "binäre" Kommazahl. Die Auteilung der 32bit in Vorzeichen, Mantisse und Exponent findest du hier:

    http://de.wikipedia.org/wiki/IEEE_754
  3. Uranus

    Uranus Grünschnabel

    Hmm hängt aber auch immer vom verwendeten System ab

    Pascal macht es z.B. anders als C

    Ich schau heute Nachmittag nochmal in meinen Unterlagen da hatte ich das mal ganz genau aufgeschrieben :) inkl. Beispiel. Man muss da nämlich noch ein paar Konventionen beachten wie die Mantisse und der Exponent gebildet werden.

    Ach das waren noch Zeiten :rolleyes: :)
  4. squeaker

    squeaker Erfahrenes Mitglied

    Ich dachte für so was gibt es den Standard (IEEE 754)?
  5. RedWing

    RedWing Erfahrenes Mitglied

    Also ein IEEE Format sind eine Sequenz von 32 Bits, die in deinem Recher abgelegt
    werden und sich folgendermassen zusammensetzen:

    Bv| e7...e0 | m1 ... m23 (single precission)

    Bv ist das Vorzeichen Bit
    e7...e0 ist der Exponent deiner Zahl welcher wiederum in Excess 2^(n-1)-1
    Darstellung angegeben wird....
    m1...m23 ist deine Mantisse sprich der Betrag deiner Gewünschten Zahl (die führende
    1 wird als m0 gespeichert und brauch nicht mit angegeben zu werden)

    Dein Beispiel sieht dann folgendermassen aus:

    Bv = 0 => Vozeichen Negativ

    e7-eo = 10000001 => 129; in Excess 2^(n-1)-1 Darstellung => 129 - 127 = 2
    m1-m23 = 01000000000000000000000 => Deine Mantisse beträgt 1,01

    => Deine gesuchte Zahl = -101 in Dezimaldarstellung: -5.

    Ich hoffe ich konnte mich einigermassen lklar ausdrücken und dir weiterhelfen...

    Gruß

    RedWing
    Zuletzt bearbeitet: 12. Juli 2004
  6. Uranus

    Uranus Grünschnabel

    Ja den Standart gibt es was aber nich bedeutet das er unbedingt eingehalten wird.
    C hält sich an den Standart 1 | 8 | 23 Bei Pascal war das eine länger und das andere kürzer die Brechnung aber fast die gleiche. da wird nur glaube auch die erste 1 mit gespeichert was C nicht macht. Ich schau mal ob ich das noch finde.

    Aber die erklärung von RedWing is richtig.
  7. lapislazuli

    lapislazuli Grünschnabel

    Danke @RedWing, squeaker und Uranus

    Langsam wird mir das etwas klarer, das Beispiel von RedWing hat mir etwas weitergeholfen, jedoch ganz klar ist mir das noch nicht. Das Vorzeichen ist klar.

    Was ist aber wenn für e zum Beispiel steht 00000101 das sind ja dann 5 und 5 - 127 ergibt was negatives. Ausserdem steht die Zahl doch im zweierkomplement, somit müssten ja um auf die Dezimalzahl zu kommen für die Werte größer 127, 256 abgezogen werden, oder?

    Wie Du auf die Mantisse gekommen bist hab' ich auch nicht ganz verstanden, die eins davor ist klar, die wird standardmässig weggelassen, aber der Rest, kannst Du das mal ausführlich darlegen?

    Gruß
  8. RedWing

    RedWing Erfahrenes Mitglied

    Also das mit der Mantisse ist eine Standard Darstellung sprich es wird die Zahl immer
    in der Form 1,xxxxxxxxxxxxxxxxxxxxxxx mit x € {0,1} dargestellt.
    Sprich du kannst die auffüllenden 0en einfach weglassen, bei der Umrechnung:

    Bsp.: m1...m23 = 00000000000000000000000 => Deine gesuchte Mantisse ist also 1,0
    (Bsp2.:m1...m23 = 00100000000000000000000 => gesuchte Mantisse: 1,001)

    Der Rest wird durch den Exponenten bestimmt:
    e7...e0
    wird in der sog. Excess 2^(n-1)-1 Darstellung notiert
    => Bei 8 Bit Exponentendarstellung (singleprecission) ergibt sich
    ein Offset von 2^(8-1)-1 = 127 den du abziehen musst.
    Es wird nicht im 2er Komplement dargestellt...

    Dein Beispiel für:
    e7...e0 = 00000101 wäre also 5 - 127 = -122

    => Verschiebung des Kommas an der Mantisse um 122 Stellen nach links.

    => die gesuchte Zahl in Binärdarstellung = 1,0 * 2^(-122) welches du jetzt noch in
    Dezimal umrechnen müsstest.

    Gruß

    RedWing
  9. lapislazuli

    lapislazuli Grünschnabel

    Okay, danke an alle!

    Zum Glück kam die Frage nun in der Klausur nun doch nicht dran, aber man weis ja nie, wo man das noch brauchen kann, thx.

    Grüße
    Johannes

Diese Seite empfehlen