Dies ist eine alte Version des Dokuments!


Gleitkomma-Darstellungen in binären Systemen nach IEEE 754

Bei Gleitkommazahlen steht das Komma nicht mehr an einer festen Stelle, sondern wird soweit nach links verschoben, dass nur noch eine Stelle (≠ 0) vor dem Komma übrig bleibt. Die Position des Kommas wird durch einen Exponenten festgehalten, so dass sich folgende Formel für Gleitkommazahlen ergibt:

m * be

Wobei »m« der Mantisse; »b« der Basis; und »e« dem Exponenten entspricht. Beispiele:

15000 = 1,5 * 104
15250 = 1,525 * 104
0,001 = 1 * 10-3

Dieser Vorgang wird »Normalisierung« genannt und findet so auch in wissenschaftlichen Darstellungen von besonders großen oder kleinen Zahlen statt. In Computersystemen sind für die Speicherung von gebrochenen Dezimalzahlen die Datentypen »float« und »double« vorgesehen, welche beide schon implizit die Gleitkomma-Darstellung vorsehen, wobei hier jedoch als Basis »2« verwendet wird, was aus dem binären System kommt.

In der 32 Bit Matrix eines »float« Datentyps (single precision) werden insgesamt 23 Bit für die Mantisse »m«, 8 Bit für den Exponenten »e« und 1 Bit für das Vorzeichen »v« vorgesehen, damit auch negative Zahlen dargestellt werden können:

Der Exponent

Für den Exponent »e« sind im 32-Bit Datentyp »float« 8 Bit vorgesehen. Wie wir jedoch oben bei den Beispielen zur Normalisierung schon gesehen haben, kann es bei Zahlen < 0 auch zu negativen Exponenten kommen (zB 10-3). Damit auch negative Zahlen binär dargestellt werden können, wird üblicherweise die Zweierkomplementdarstellung bei solchen Datentypen angewandt. Mit 8 Bit zB lassen sich 256 Zustände darstellen, was bei normaler, nicht vorzeichenbehafteter Interpretation den Wertebereich »0 bis 255« erschließt. Bei der Zweierkomplementdarstellung hingegen wird das höchstwertige Bit für die Speicherung des Vorzeichens verwendet (0 → positiv; 1 → negativ) und die verbliebenen 7 Bit (welche 128 Zustände darstellen können) markieren dann den Wertebereich von »-128 bis +127«.

Auf diese Art der Einteilung wurde aber bei der Speicherung des Exponenten bewusst verzichtet, stattdessen wird der Exponent mit einem »Bias« gespeichert. Der »Bias« ist ein vereinbarter, gedachter Wert, welcher zu dem eigentlichen Exponenten hinzu addiert wird. Der »Bias« beträgt bei »float« mit 8 Bit Exponent den Wert »127«, welcher sich nach folgender Formel errechnet (wobei »e« der Anzahl der verfügbaren Bits für die Speicherung des Exponenten entspricht):

(2(e-1)) - 1 ⇒ 27 - 1 ⇒ 128 - 1 = 127

Das Addieren der festen Zahl »127« zum Exponenten »e« bewirkt, dass der Exponent in jedem Fall positiv ist, wobei es hier einige Sonderfälle gibt, welche später noch erläutert werden.

Die Mantisse

Als »Mantisse« bezeichnet man den Bereich in welchem die normalisierte Gleitkommazahl gespeichert wird. Die Normalisierungsbedingung einer nach »IEEE 754« definierten Gleitkommazahl wurde wie folgt festgelegt:

1 ≤ m < 2

Wie oben schon erwähnt wird bei der Normalisierung einer Dezimalzahl das Komma soweit nach links verschoben, bis nur noch eine Zahl ≠ 0 vor dem Komma stehen bleibt, dieser Grundsatz gilt auch im binären System. Da es im binären System neben einer »0« nur noch eine »1« gibt, ist somit die Vorkommastelle in jedem Fall eine »1« und somit wurde in den Regularien von »IEEE 754« festgelegt, dass auf die Vorkommastelle bei der Speicherung der Mantisse verzichtet wird. Dieses Weglassen der Vorkommastelle wird als »Hidden Bit« bezeichnet.

So nun sind die Zutaten bekannt, jetzt kann man das mal an einem Beispiel demonstrieren. Nehmen wir mal die Zahl »23,125«; das Vorzeichen ist noch relativ einfach zu ermitteln, die Zahl ist positiv, dementsprechend ist das Vorzeichen-Bit »0«. Um nun diese reelle Zahl in eine normalisierte binäre Zahl zu bringen, rechnen wir erst einmal in eine Festkommazahl um:

23,125

23 / 2 = 11 R 1
11 / 2 =  5 R 1
 5 / 2 =  2 R 1
 2 / 2 =  1 R 0
 1 / 2 =  0 R 1 ↑

0,125 * 2 = 0,25 → 0 ↓ 
0,25  * 2 = 0,5  → 0
0,5   * 2 = 1,0  → 1
0,0   * 2 = 0,0  → 0

Somit haben wir das Zwischenergebnis »10111,0010«, welches nun noch normalisiert werden muss. Um nur eine Ziffer (≠ 0) vor dem Komma stehen zu haben, muss dass Komma um vier Stellen nach links verschoben werden, dass entspricht einer Multiplikation mit »24«. Für die normalisierte Darstellung erhalten wir demnach: 1,0111001 * 24. Die Mantisse wird nun ohne der ersten »1« gespeichert (»hidden bit«) und ergibt somit: 10111001, die restlichen Stellen, werden mit Nullen aufgefüllt.

Der Exponent ist »410«, was »1002« entspricht. Nun wird noch der »Bias« (127) auf den Exponenten addiert: 410 + 12710 = 13110 = 100000112. Setzt man nun diese ermittelten Werte zusammen kommen wir zu folgendem Ergebnis:

it/float.1322654172.txt.gz (17870 views) · Zuletzt geändert: 2011/11/30 12:56 von wikisysop
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0