Zahlensysteme

Abgesehen von nichtregulären Zahlensystemen, wie z.B. das System der römischen Zahlen, fußen alle Zahlensysteme auf einer Zahlenbasis. So basiert das alltagsübliche Dezimalsystem auf der Zahl 10. Neben diesem bekannten System sind beliebig viele andere Systeme denkbar. In jüngster Zeit hat das Binärsystem stark an Bedeutung gewonnen, die dieses System ideal auf die binäre Logik heutiger Rechner angepasst ist.

Eine allgemeingültige Darstellung einer Zahl beruht in einem regulären Zahlensystem auf der Summe gewichteter Potenzen der Basis dieses Zahlensystems:

\( y = {x_N} \cdot {b^N} + {x_{N - 1}} \cdot {b^{N - 1}} + \,....\, + {x_1} \cdot {b^1} + {x_0} \cdot {b^0} + {x_{ - 1}} \cdot {b^{ - 1}} + {x_{ - 2}} \cdot {b^{ - 2}} + \,..... \) Gl. 71

wobei \(N \in Z; \quad {x_n} \in \left\{ {0;1;\,....\,N - 1} \right\}\)

Im üblichen Schriftgebrauch entsprechen die Potenzen den jeweiligen Stellen der Zahl.

Dezimalzahlen

Dezimalzahlen beruhen auf der Basis b = 10. Folglich können die Gewichte xn alle Werte zwischen 0 und 9 annehmen.

Beispiel: Die Zahl 23495,3 soll in die Summendarstellung gebracht werden:

\( 23495,3 = 2 \cdot {10^4} + 3 \cdot {10^3} + 4 \cdot {10^2} + 9 \cdot {10^1} + 5 \cdot {10^0} + 3 \cdot {10^{ - 1}} \)

Binärzahlen

Binärzahlen haben die Basis b = 2. Daher können die Gewichte nur die Werte 0 und 1 annehmen.

Beispiel: Die Zahl 50 soll in die Summendarstellung gebracht werden:

\( 50 = 1 \cdot {2^5} + 1 \cdot {2^4} + 0 \cdot {2^3} + 0 \cdot {2^2} + 1 \cdot {2^1} + 0 \cdot {2^0} \)

Rechnen mit dem Computer – was ist zu beachten?

Prinzipiell ist die Wortlänge, d.h. die Anzahl von Bits, die gespeichert oder in der ALU (algorithmic logic unit) verarbeitet werden können, auf endliche Längen begrenzt. Heutige CPUs (central processing units) arbeiten mit Wortlängen von 32 bzw. 64 Bit, die ALU’s mit bis zu 128 Bit.

Die Folge der begrenzten Wortlänge ist, dass Zahlen nicht beliebig groß und/oder beliebig genau in einem Rechner verarbeitet werden können. Im praktischen Gebrauch stellt diese Einschränkung kein prinzipielles Hindernis dar, denn auch die Zahlen, mit denen wir gewöhnlicher Weise hantieren sind endlich. Dennoch: es gibt in der Mathematik bzw. Physik Aufgaben, bei denen sehr große Zahlen behandelt werden müssen. Andererseits gibt es aber Aufgaben, die Berechnungen in kürzester Zeit (real time tasks) ausführen müssen und daher zeitoptimierte Rechenverfahren benutzen, die ihrerseits andere Anforderungen an die verwendete Zahlendarstellung stellen. Diesen eigentlich gegensätzlichen Forderungen Rechnung zu tragen wurden verschiedene Zahlenformate kreiert, deren wichtigste Vertreter im Folgenden vorgestellt werden sollen.

Integer und Gleitkomma

Deklarationen vom Typ Integer benutzen die gesamten Wortlänge zur Darstellung einer ganzen Zahl. Negative Zahlen werden durch ein gesetztes höchstwertiges Bit gekennzeichnet.

Integer Zahl
VZ N-1 N-2 ... ... 1 0

Zusätzlich werden negative Zahlen im sog. Zweierkomplement dargestellt. Dies entspricht der logischen Negation aller Bits plus 1:

\( - y = \neg y + 1 \) Gl. 72

Diese Darstellung sichert, dass 0 = -0

Operation Ü VZ N-1 N-2 ... ... ... 0
0   0 0 0 0 0 0 0
Komplement 1 1 1 1 1 1 1
+1 0 0 0 0 0 0 1
Resultat -0 1 0 0 0 0 0 0 0

Da die Wortlänge aber nur N+1 beträgt, bleibt der Übertrag (an Position N+1) wirkungslos.

Operation Ü VZ N-1 N-2 ... ... ... 0
1   0 0 0 0 0 0 1
Komplement 1 1 1 1 1 1 0
+1 0 0 0 0 0 0 1
Resultat -1 1 1 1 1 1 1 1 1

Beispiel: Die Zahl -50 soll als Binärzahl dargestellt werden:

50 = 0110010

-50 = 1001110

Deklarationen vom Typ Real benötigen mindestens zwei Speicherplätze (Worte) für ihre Darstellung. Das erste Wort ist die Mantisse, das zweite Wort der Exponent der darzustellenden Zahl.

Mantisse  

Exponent

VZ hB N-1 ... ... 1 0   VZ M-1 M-2 ... ... 1 0
... 1 ... ... ... ... ...   ... ... ... ... ... ... ...

Um die größtmögliche Genauigkeit zu gewährleisten, werden die Gleitkommazahlen so normalisiert (d.h. der Exponent angepasst), dass die erste Stelle der Mantisse immer 1 wird. Da dieser Wert aber immer 1 ist, kann er in der Darstellung auch weggelassen werden. Diese Stelle wird darum auch als hidden Bit bezeichnet. Bei Rechenoperationen ist dieses Bit natürlich wieder zu aktivieren!

Durch die Normalisierung ist Wertebereich der Mantisse ist auf 1000... (Dez. 1) bis 1111... (Dez. 2-2-(N-1)) festgelegt. Das Vorzeichen der Mantisse wird als separates Vorzeichen-Bit mitgeführt. Die Mantisse wird im Falle negativer Zahlen nicht in fdas Zweierkomplement überführt.

Der Exponent hingegen wird wie eine Ganze Zahl behandelt. Negative Exponenten werden im Zweierkomplement dargestellt.

Vor der Ausführung einer Rechenoperation muss eine Normalisierung der Operanden vorgenommen werden, denn nur Zahlen mit identischen Exponenten können richtig verknüpft werden.

Beispiel:

Die binären 2x8 Bit langen Zahlen 10000000E-1 (0,5..) und 10000000E-2 (0,25) sollen addiert werden:

  Mantisse Exponent
  VZ hB 7 6 ... ... 2 1 VZ 7 6 5 4 3 2 1
0,5 0 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1
0,25 0 1 0 0 0 0 0 0 1 1 1 1 1 1 1 0
Normalis. 2. Op 0 0 1 0 0 0 0 0 1 1 1 1 1 1 1 1
Addition 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1

Die Rückwandlung in eine Dezimalzahl ergibt

(1·27 + 1·26)·2-1/128 = (128+64)/256 = 0,75

Rechengenauigkeit

Die erreichbare Rechengenauigkeit ist durch die Wortlänge, d.h. die Anzahl der darstellenden Bits gegeben. Mit einer Wortlänge von N Bits können 2N Zustände unterschieden werden. Bleibt die darzustellende Zahl im Rahmen der verfügbaren Stellen, beträgt die Genauigkeit 2-N.

Wird aber der vorgegebene Rahmen überschritten z.B. bei einer Addition/Subtraktion großer Zahlen, erfolgt ein Überlauf, der in die Vorzeichen-Position erfolgt. Der damit verbundene Fehler ist gravierend, denn das Ergebnis ist nicht einmal der Tendenz nach richtig!

Beispiel:

Die zwei Zahlen 66 und 74 sind zu addieren. Es steht eine Wortlänge von 8 Bit zur Verfügung.

Bit Nr. VZ 7 6 5 4 3 2 1
66 0 1 0 0 0 0 1 0
74 0 1 0 0 0 1 1 0
Summe 1 0 0 0 1 0 0 0

Das gesetzte Vorzeichen Bit zeigt an, dass es sich bei der Summe um eine negative Zahl handelt. Die Rückwandlung in eine Dezimalzahl ergibt

–(64 + 32 + 16 + 4 + 2 + 1) + 1 = -118

und nicht 140 wie erwartet.

Um wenigstens tendenziell richtig zu liegen werden im Fall einer Bereichsüberschreitung Wertbegrenzungen auf den maximal möglichen Wert vorgenommen.