# Gleitkommadarstellung im Dualsystem



## lapislazuli (12. Juli 2004)

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


----------



## squeaker (12. Juli 2004)

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


----------



## Uranus (12. Juli 2004)

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


----------



## squeaker (12. Juli 2004)

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


----------



## RedWing (12. Juli 2004)

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


----------



## Uranus (12. Juli 2004)

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.


----------



## lapislazuli (12. Juli 2004)

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ß


----------



## RedWing (12. Juli 2004)

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


----------



## lapislazuli (17. Juli 2004)

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


----------

