Forum: Mikrocontroller und Digitale Elektronik Zahlenformate und deren Darstellung


von Thomas (Gast)


Lesenswert?

Hi Leute,

ich habe hier eine Aufgabe, bei der ich nicht weiterkomme. Ich hoffe Ihr 
könnt mir helfen. Die Aufgabe lautet wie folgt:

"Stellen Sie das Ergebnis -2.75 als Gleitkommazahl im 8Bit 
Minifloat-Format
(1.4.3.7) bestmöglich dar. Bitte zusätztlich in diesem Format angeben 
(1.4.3)."


Ich weiss, dass die erste Stelle für das Vorzeichenbit steht, die 4 für 
den Exponenten, die 3 für Mantisse und die 7 für Bias steht. Beim 
zweiten soll man den Bias vernachlässigen. Kann mir das jemand erklären 
und die zu beachtenden Schritte schildern, wie man das, wie oben 
gewünscht, darstellt?


Gruss
Thomas

von tip (Gast)


Lesenswert?

also 8 bit sind 8 bit, du zählst ja drüber hinaus.

und dann würde das binär bedeuten

x   x  x  x     x    x    x     x

VZ  2^1  2^0 . 1/2  1/4  1/8  1/16

falls man das verstehen kann

also in binärdarstellung:

1101 1000    weil das dann genau -2,75 ergibt

von Thomas (Gast)


Lesenswert?

Hi Danke für die schnelle Antwort,
aber ich denke Du hast es in der Festkommazahl Schreibweise gelöst.

Problem hierbei ist, dass man es in Gleitkommazahl Darstellung 
darstellen soll, irgendwie gibt es da wohl eine Norm IE754 oder 
ähnliches.


Danke :)

Gruss
Thomas

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Thomas schrieb:
> eine Norm IE754

IEEE754

Falls dein Vorlesungsskript sich dazu ausschweigt, kannst du die Details
allemal brauchbar genug bei Wikipedia nachlesen.

von Karl H. (kbuchegg)


Lesenswert?

Thomas schrieb:
> Hi Danke für die schnelle Antwort,
> aber ich denke Du hast es in der Festkommazahl Schreibweise gelöst.

Nö.

> die 4 für den Exponenten, die 3 für Mantisse

Bist du dir da ganz sicher?
Normal hat man mehr Bits für die Mantisse und weniger Bits für den 
Exponenten. Warum wird gleich klar werden

tip hat das wohl ähnlich gesehen und die Dinge umgedreht.

Wie ist er drauf gekommen?

du sollst
  -2.75    darstellen

Das Vorzeichen ist klar, das wandert sofort in sein Bit
Damit bleibt die Aufgabe 2.75 mit 4 Bits Mantisse und 3 Bits Exponent 
darzustellen.

gesucht sind also m und e, sodas

     m * ( 2 hoch e ) = 2.75

(Ich schreib im folgenden ^ anstelle von 'hoch')

Wir wissen, dass die Mantisse immer im Bereich 0 bis 1 sein muss. Also 
probieren wir mal.

Kann der Exponent 0 sein?
   -> dann müsste m gleich 2.75 sein, denn (2.75 * 2^0) = 2.75
   -> das kann nicht sein, denn 2.75 als Mantisse ist größer 1

Kann der Exponent 1 sein?
   -> dann müsste m gleich 1.375 sein (also die Hälfte von 2.75)
      denn 1.375 * 2^1 = 2.75
   -> kann auch nicht sein, denn 1.375 ist immer noch größer als 1

Kann der Exponent 2 sein?
   -> dann müsste die Mantisse 0.6875 sein (also die Hälfte von 1.375)
      denn 0.6875 * 2^2 = 2.75
   -> das passt. 0.6875 ist kleiner als 1


In der Praxis dividierst du deine Zahl einfach solange durch 2, bis du 
kleiner als 1 bist, bzw. umgekehrt, bei kleinen Zahlen multiplizerst du 
mit 2 bist du die größte Zahl kriegst, die gerade noch kleiner als 1 
ist. Und: du zählst mit, wie oft du multiplizert und dividiert hast. 
Diese Anzahl ist dein Exponent.

Also: Der Exponent ist also 2 und die Mantisse 0.6875

Die 2 als Exponent lassen sich in Bitform problemlos angeben.
Was ist mit den 0.6875?

Du hast 4 Bits zur Verfügung, mit den Wertigkeiten
  1/2
  1/4
  1/8
  1/16

  x  x  x  x

Um 0.6875 darzustellen, brauchst du da das Bit für 0.5?
Ja, das brauchst du, denn die restlichen 3 Bits zusammen ergeben keine 
0.5 mehr. Da 0.6875 größer als 0.5 ist, musst du also auf jeden Fall das 
0.5 Bit benutzen

   1  x  x  x

was ist mit dem nächsten Bit mit der Wertigkeit 0.25
Sind beide Bits gesetzt
   1  1  x  x
dann wäre das mindestens die Zahl 0.75  (= 0.5 + 0.25)
das ist aber schon zu groß für 0.6875
Also brauchst du das Bit nicht, und es bleibt 0

   1  0  x  x

nächstes Bit 0.125. Würdest du es setzen
   1  0  1  x
dann wäre das mindestens die Zahl 0.625 (= 0.5 + 0.125)
0.625 ist kleiner als die darzustellenden 0.6875. Daher brauchst du 
dieses Bit, denn mit den noch folgenden Bits kannst du keine 0.125 mehr 
erreichen und die brauchst du um deine Zahl zumindest bis auf 0.625 
'anzuheben'.
Also brauchst du dieses Bit auf 1

Was ist mit dem nächsten Bit, mit der Wertigkeit 0.0625?
Setzt du es auf 1

   1  0  1  1
dann ist das die Zahl 0.6875 (= 0.5 + 0.125 + 0.0625)

Und das passt genau. 0.6875 waren in der Mantisse zu erreichen. Das 
Bitmuster

   1  0  1  1

ergibt mit den Bitwertigen ( 0.5 0.25 0.125 0.0625 ) die Darstellung von 
0.6875

also lautet dein Bitmuster

x    x   x   x     x    x    x     x

VZ     2^1  2^0 . 1/2  1/4  1/8  1/16


1    0   1   0     1    0    1     1



Habt ihr denn das in der Schule nicht durchgekaut?

von Karl H. (kbuchegg)


Lesenswert?

Und jetzt die Preisfrage:

Warum krieg ich ein anderes Ergebnis raus als 'tip' und wo stimmt meine 
Darstellung nicht mit der IEEE754 überein?

-> und was bedeutet das für die Berechnung?

-> und warum hat IEEE754 eine klein wenig andere Darstellung in der 
Mantisse? (für 10 Zusatzpunkte in der Lösung der Hausaufgabe)

von mira (Gast)


Lesenswert?

Hallo Karl Heinz,

klasse Ausführung, verständlicher hätte man es nicht ausdrücken können, 
danke für die Details!

Gruß, mira

von Thomas (Gast)


Lesenswert?

vielen Dank für die hilfreichen Antworten,
aber ja es stimmt: 4 Bits für den Exponenten und nur 3 für die Mantisse 
:)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.