ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
7004
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
  1. #1
    lapislazuli ist offline Rookie
    Registriert seit
    Jul 2004
    Beiträge
    0
    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. #2
    Avatar von squeaker
    squeaker ist offline Mitglied Platin
    Registriert seit
    Jun 2004
    Ort
    Würzburg
    Beiträge
    577
    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. #3
    Uranus ist offline Mitglied
    Registriert seit
    Jun 2004
    Beiträge
    21
    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
     

  4. #4
    Avatar von squeaker
    squeaker ist offline Mitglied Platin
    Registriert seit
    Jun 2004
    Ort
    Würzburg
    Beiträge
    577
    Ich dachte für so was gibt es den Standard (IEEE 754)?
     

  5. #5
    Registriert seit
    Oct 2003
    Beiträge
    1.707
    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
    Geändert von RedWing (12.07.04 um 10:58 Uhr)
     
    "I'm not deaf, I'm ignoring you"
    ----

  6. #6
    Uranus ist offline Mitglied
    Registriert seit
    Jun 2004
    Beiträge
    21
    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. #7
    lapislazuli ist offline Rookie
    Registriert seit
    Jul 2004
    Beiträge
    0
    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. #8
    Registriert seit
    Oct 2003
    Beiträge
    1.707
    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
     
    "I'm not deaf, I'm ignoring you"
    ----

  9. #9
    lapislazuli ist offline Rookie
    Registriert seit
    Jul 2004
    Beiträge
    0
    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
     

Thema nicht erledigt

Ähnliche Themen

  1. Dualsystem in Dezimalsystem
    Von MacMo im Forum Java
    Antworten: 3
    Letzter Beitrag: 09.11.08, 12:09