Computer und Zahlen

Computer und Zahlen, zwei Dinge, die vordergründig zusammengehören. Der Begriff Computer leitet sich aus dem Lateinischen ab. Wir bezeichnen eine speicherprogrammierbare Rechenmaschine als Computer. So ein Gerät kann also rechnen und ist programmierbar. Von einer Rechenmaschine erwarten wir, dass sie rechnen kann. Der Laie erwartet zumeist auch noch, dass solch ein Computer präzise rechnet.

Computer und Zahlen – enttäuschte Erwartungen

Prüfen wir einmal aus, ob die gestellten Erwartungen erfüllt werden. Wir öffnen dazu eine Python-Shell. Ich verwende hier IDLE, die Python-Shell mit grafischer Benutzeroberfläche.

>>> 2**1000                       #1
10715086071862673209484250490600018105614048117055336074437503883703510511249
36122493198378815695858127594672917553146825187145285692314043598457757469857
48039345677748242309854210746050623711418779541821530464749835819412673987675
59165543946077062914571196477686542167660429831652624386837205668069376
>>> 2 / 4                         #2
0.5
>>> 1 / 3                         #3
0.3333333333333333
>>> (1 / 3) * 3                   #4
1.0
>>> 1 - 0.99                      #5
0.010000000000000009
>>> 1 - 0.010000000000000009      #6
0.99

Berechnung 1 ist zumindest beeindruckend. Die meisten Programmiersprachen können \(2^{1000}\) nicht berechnen. Python kann das. Augenscheinlich gibt es aber unterschiedliche Zahlenarten, wie uns Berechnung 2 zeigt. Zahlen mit einem Dezimalpunkt, heißen Fließkommazahlen. Der zugehörige Datentyp in Python heißt float. Demgegenüber gibt es ganze Zahlen, deren Datentyp in Python int lautet. Ganze Zahlen und Gleitkommazahlen unterscheiden sich nicht nur hinsichtlich ihrer Darstellung (und ihrer literalen Eingabe), auch führt der Computer Berechnungen anders aus. Gleitkomma-Arithmetik ist ungleich der ganzzahligen Arithmetik.

Die Berechnungen 3 und 4 lassen erste Zweifel an den Rechenfähigkeiten unseres Computers aufkommen. Du weißt sicherlich aus dem Mathematikunterricht, wieso die Berechnungen falsch sind. Korrekt hätte das Ergebnis von 1 / 3 periodisch sein müssen, nämlich \(0.\overline{3}\).

Aber selbst scheinbar einfache Berechnungen, die kein periodisches Ergebnis haben, produzieren Resultate, die wir nicht mit unseren in der Schule erworbenen Mathematik-Kenntnissen in Einklang bringen können.

Die Berechnungen 4 und 6 sind zwar ebenso falsch, stehen aber in einem gewissen Einklang zu den korrespondieren Berechnungen 3 und 5.

Als (angehende) Informatiker interessieren wir uns natürlich für die Ursachen dieser offensichtlichen Fehler. In diesem Beitrag, sowie den folgenden Beiträgen, werde ich Licht ins Dunkel bringen. Ich werde Dir erklären, wie Computer und Zahlen zusammenhängen, wie sie Zahlen intern abbilden. Anhand dieser Ausführungen lernst Du, die teilweise seltsam anmutenden Ergebnisse zu verstehen.

Eine Zahl ist ein abstraktes Konzept

Ich vermute, Du bist ebenso wenig einmal mit einer 42 zusammengestoßen wie ich. Im Gegensatz zu Türen, anderen Menschen oder auch nur Äpfeln oder ähnlichen Dingen, könne wir Zahlen weder sehen noch anfassen. Sie existieren ausschließlich in unseren Köpfen. Wenn ich „7“, „VII“ oder „sieben“ schreibe, so ist das nicht die Zahl selbst. Es handelt sich lediglich um ein Symbol beziehungsweise unterschiedliche Notationen. Was ich aber meine, wenn ich diese schreibe, ist klar. Du assoziierst das Gelesene direkt mit der Zahl 7. Die ist allerdings nur ein Geistesblitz. Dennoch kannst Du damit etwas anfangen. Du kannst damit rechnen. Viele dieser Berechnungen sind nicht nur Geistesakrobatik. Wenn Du eine Talbrücke überquerst bist Du den Ingenieuren, die sie konstruiert haben, dankbar für ihre Rechenfertigkeiten und vertraust darauf, dass die Brücke nicht einstürzt.

Zahlendarstellungen

Die oben gezeigten Notationen sind Zahlendarstellungen. Im Alltag verwenden wir das indisch-arabische Dezimalsystem. Das ist ein Stellenwertsystem mit der Basis 10. Es nutzt die Ziffern 0 bis 9, um damit alle Zahlen darstellen zu können. Anmerkung: Nicht alle Zahlen sind konkret darstellbar. Die irrationalen Zahlen, wie beispielsweise \(\pi\), lassen sich nicht zifferngenau damit aufschreiben.

\[ \begin{aligned} 4223 &= 4000 + 200 + 20 + 3 \\ &= 4 \cdot 1000 + 2 \cdot 100 + 2 \cdot 10 + 3 \cdot 1 \\ &= 4 \cdot 10^3 + 2 \cdot 10^2 + 2 \cdot 10^1 + 3 \cdot 10^0 \end{aligned} \]

Auch unsere digitalen Computer arbeiten mit einem Stellenwertsystem. Es hat allerdings die Basis 2. Zwei Zustände, die wir gern mit 0 und 1 bezeichnen, lassen eine effiziente Bauweise der erforderlichen Schaltungen zu. Die arbeiten mit zwei Zuständen, Strom und kein Strom, magnetisch und nicht magnetisch, … – So werden dementsprechend auch Zahlen codiert. Im binären Zahlensystem haben wir nur die Ziffern 0 und 1.

Für ein genaues Verständnis müssen wir uns ansehen, wie Zahlen, je nach Datentyp (int oder float im Computer abgebildet werden.

Schreibe einen Kommentar