====== Festkommazahlen ======
Wir haben nun eine Darstellung für natürliche und -- mit dem Zweierkomplement -- eine für ganze Zahlen im Binärsystem gefunden. Offen ist die Frage wie man **Brüche/Kommazahlen** im Binärsystem darstellen kann?
Eine erste Möglichkeit, bei der alle bisherigen Rechenregeln erhalten bleiben, stellt die Darstellung als Festkommazahl dar. Der größte Vorteil bei dieser Darstellung ist, dass dieselbe ALU((Aritmetic-Logic-Unit, siehe auch https://de.wikipedia.org/wiki/Arithmetisch-logische_Einheit)) des Rechners, die die ganzzahligen Berechnungen durchführt auch mit dieser Darstellung umgehen kann, man benötigt im Prozessor also kein neues Rechenwerk für diese Art der Kommazahlen.
===== Wie funktionierts? =====
Bei der Festkommadarstellung wird im Vorfeld definiert, an welcher Stelle sich das Komma befindet, bzw. wie viele Vorkomma- und wie viele Nachkommastellen die Zahl beinhaltet. Das wird mit der Bezeichnung **Q** angegeben:
* Q1: Eine Nachkommastelle
* Q2: zwei Nachkommstellen
* Q3: drei Nachkommastellen
* Q4: Vier Nachkommastellen
* Q5: ...
Die Wertigkeit hinter der Kommastelle wird entsprechend der 2er-Potenzen fortgeführt.
{{ :faecher:informatik:oberstufe:codierung:zahlendarstellungen:festkomma:auswahl_272.png?700 |}}
Bei fester Bitlänge der gesamten Zahl wird also mit wachsender Anzahl der Nachkommastellen der Wertebereich vor dem Komma kleiner.
----
{{:aufgabe.png?nolink |}}
=== (A1) ===
* Bestimme die dezimalen Werte aller Nachkommastellen bei Q4.
* Welche Einschränkung ergibt sich daraus für Zahlen, die in Q2 dargestellt werden können?
* Kann man die Zahl 8,3 in Q3 darstellen?
* Kannst du eine Regel formulieren, welche Zahlen man in der Festkommadarstellung darstellen kann? Denke daran, dass alle endlichen Dezimalzahlen als Bruch geschrieben werden können.
++++ Lösungsvorschlag |
Die einzelnen Werte aller Nachkommastellen bei Q4 ergeben sich aus allen Möglichkeiten, die dieses 4 Bits annehmen können.
^ Bit 1 ^ Bit 2 ^ Bit 3 ^Bit 4 ^ Dezimalwert ^
| 0 | 0 | 0 | 0 | 0.0000 |
| 0 | 0 | 0 | 1 | 0.0625 |
| 0 | 0 | 1 | 0 | 0.1250 |
| 0 | 0 | 1 | 1 | 0.1875 |
| 0 | 1 | 0 | 0 | 0.2500 |
| 0 | 1 | 0 | 1 | 0.3125 |
| 0 | 1 | 1 | 0 | 0.3750 |
| 0 | 1 | 1 | 1 | 0.4375 |
| 1 | 0 | 0 | 0 | 0.5000 |
| 1 | 0 | 0 | 1 | 0.5625 |
| 1 | 0 | 1 | 0 | 0.6250 |
| 1 | 0 | 1 | 1 | 0.6875 |
| 1 | 1 | 0 | 0 | 0.7500 |
| 1 | 1 | 0 | 1 | 0.8125 |
| 1 | 1 | 1 | 0 | 0.8750 |
| 1 | 1 | 1 | 1 | 0.9375 |
In Q2 werden zwei Bits für die Nachkommastellen verwendet. Also
^Bit 1 ^ Bit2 ^ Dezimalwert^
|0|0|0.00|
|0|1|0.25|
|1|0|0.5|
|1|1|0.75|
Mit nur 2 Bits für die Nachkommastellen/den Bruchteil ist die Genauigkeit begrenzt. Die kleinste darstellbare Genauigkeit ist $2^{-2}=0.25$
Ob man die Zahl $8,3$ in Q3 darstellen kann lässt sich folgendermaßen überprüfen.
Q3 verwendet 3 Bits für die Nachkommastellen mit der Wertigkeit $2^{-1}=0.5, 2^{-2}=0,25$ und $2^{-3}=0,125$. Der ganzzahlige Teil der Zahl ist $8=2^3$. Der gebrochene Teil ist $0,3$. Wir versuchen also diesen Teil mit den in Q3 verfügbaren Nachkommastellen darzustellen:
$0,3 \approx 0.375 = 2^{-2}+2^{-3}$
$0,3 \approx 0.25 = 2^{-2}$
Exakt kann man den Nachkommateil also nicht darstellen.
Die zwei besten Approximationen wären:
^ ^ 1 ^ 0 ^ 0 ^ 0 ^ 0 ^ 1 ^ 0 ^
|Q3|$2^3$|$2^2$|$2^1$|$2^0$|$2^{-1}$|$2^{-2}$|$2^{-3}$|
bzw.
^ ^ 1 ^ 0 ^ 0 ^ 0 ^ 0 ^ 1 ^ 1 ^
|Q3|$2^3$|$2^2$|$2^1$|$2^0$|$2^{-1}$|$2^{-2}$|$2^{-3}$|
Welche Zahlen kann nun mit der Festkommadarstellung darstellen? Schauen wir nur die Nachkommastellen an, so können wir genau diese exakt darstellen, die die Form $\frac 1 2, \frac{1}{4},\frac{1}{8},\frac{1}{4}+\frac{1}{8} $ usw... haben.
Am Beispiel $\frac{1}{4}+\frac{1}{8}=\frac{3}{8}$ erkennen wir, dass dies am Nenner also nichts ändert.
Es sind also alle Zahlen darstellbar, deren Bruchteil (nach Kürzen) im Nenner eine Zweierpotenz haben.
++++
----
{{:aufgabe.png?nolink |}}
=== (A2) ===
Rechne die Zahlen im Binärsystem Q4 angegebenen Zahlen ins Dezimalsystem um - oder andersrum:
* 10101100b = ?? d
* 00010001b = ?? d
* 6,375d = ?? b
* 9,9375d = ?? b
++++ Lösungsvorschlag|
* 10101100b = 10,75d
* 0001001b = 1,125d
* 6,375b = 01100110b
* 9,9375d = 10011111b
++++
----
{{:aufgabe.png?nolink |}}
=== (A3) ===
* Bestimme den Zahlbereich, der sich mit 8 Bit in Q4 darstellen lässt.
* Welche Differenz haben in dieser Darstellung zwei nebeneinander liegende Zahlen? Wie kann man diese "Genauigkeit" allgemein berechnen?
* Erläutere, warum man 0,1d nur näherungsweise als Festkommazahl darstellen kann.
++++ Lösungsvorschlag |
8 Bit in Q4 gehen von $0$ bis $15,9375$.
Die Differenz zweier benachbarter Zahlen ist durch das "letzte Bit" gegeben, das ein Wertigkeit von $2^{-4}=\frac{1}{16}$ hat.
$0,1d$ kann man nicht als Festkommazahl darstellen, weil man $0,1=\frac{1}{10}$ nicht mit einem Nenner darstellen kann, der eine Zweierpotenz ist.
++++
----
{{:aufgabe.png?nolink |}}
=== (A4) ===
Berechne die Summe (binär) zweier Q4-Zahlen und kontrolliere das Ergebnis, indem du alle Werte ins Dezimalsystem umrechnest.
(i)
00111100b
01000101b
(ii)
00011000b
00001000b
++++ Lösungsvorschlag |
00111100
+ 01000101
-----------
10000001
und
00111100
+ 00001000
-----------
01000100
++++
----
{{:aufgabe.png?nolink |}}
=== (A5) ===
* Berechne mit schriftlicher Multiplikation das Produkt der beiden Q4-Zahlen. Vergleiche dein Ergebnis mit den Dezimalzahlen: ''00001000b∙00010000b =''
* Warum liefert die schriftliche Multiplikation ein falsches Ergebnis? Wie muss man dieses korrigieren?
++++ Lösungsvorschlag |
00001000∙00010000
-------------------
00000000 (00001000 mal 0)
00000000 (00001000 mal 0)
00000000 (00001000 mal 0)
00001000 (00001000 mal 1)
00000000 (00001000 mal 0)
00000000 (00001000 mal 0)
00000000 (00001000 mal 0)
00000000 (00001000 mal 0)
----------------------
000000010000000
Dies ist eine 15stellige Zahl. Die letzten 4 werden als Nachkommastellen angesehen. Damit ergibt sich die Dezimalzahl $8$. Die Ausgangsrechnung war jedoch $0,5\cdot 1=0,5$
Man muss also auch die neue Anzahl Nachkommastellen berücksichtigen. Multiplizieren wir zwei Zahlen mit je 4 Nachkommastellen hat das Produkt 8 Nachkommastellen. Interpretieren wir obige Zahl mit Q8 ergibt sich wieder die Zahl $0,5$
++++
==== Material ====
{{simplefilelist>.:*}}