Gleitkommadarstellung im Dualsystem

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
 
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
 
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: :)
 
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:
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.
 
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ß
 
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
 
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
 
Zurück