 |

|
 |
|
Können Taschenrechner rechnen?
von Boris Jakubaschk
Die Frage erscheint im ersten Moment vielleicht befremdlich, man kann aber schon
ins Zweifeln geraten, wenn man seinen Taschenrechner mit der scheinbar simplen
Aufgabe
50^(3/10*10/3)
konfrontiert und dieser anstelle der erwarteten Antwort "50" so etwas lustiges wie
"49,999999998" anzeigt. Bei heutigen Taschenrechnern gelingt dieser Effekt
zugegebenermaßen meist nicht mehr, bei der älteren Generation mit Leuchtanzeige
dafür umso öfter.
Um zu verstehen, was da vor sich geht, muss man sich ein wenig mit der Art und Weise
auseinandersetzen, wie ein Taschenrechner und letztenendes auch jeder Computer Zahlen
abspeichert. Dabei ist zuerst einmal festzuhalten, dass Taschenrechner die Zahlen intern
nicht im Dezimalsystem verarbeiten, sondern binär. Das gilt natürlich auch für
Zahlen mit Nachkommastellen.
Weiterhin muss jeder Rechner aus technischen Gründen mit gerundeten
Zahlen arbeiten - eine unendlich lange Zahl wie Pi würde sonst
schließlich auch unendlich viel Platz im Rechenwerk benötigen - und
unendlich lange zur Berechnung.
Taschenrechner arbeiten intern in einer Zahlendarstellung, die aus Mantisse und Exponent
besteht. Eine solche Darstellung kennt man als "Wissenschaftliche Zahlendarstellung"
in der Mathematik, wo man eine Zahl wie 1400000 auch schreiben kann als 1,4*106.
Taschenrechner kennen diese Darstellung meist auch und zeigen sie als "1.4E06" an.
Die Zahl vor dem E nennt man nun Mantisse, die Zahl dahinter den Exponenten. Genau so
werden Zahlen im Taschenrechner intern gespeichert und verarbeitet - nur eben nicht
im dezimalen, sondern im binären Zahlensystem.
Um dies zu verstehen muss man sich zunächst einmal vergegenwärtigen, wie unser
normales Dezimalsystem funktioniert: Man schreibt Zahlen, indem man Ziffern aneinander
reiht. Dabei verzehnfachen die Stellen vor dem Komma mit jedem Schritt nach links Ihren
Wert. Die letzte Stelle sind die "Einer", die vorletzte die "Zehner", die vorvorletzte
die "Hunderter" und so weiter.
Umgekehrt ist die Wertigkeit der Stellen nach dem Komma mit jedem Schritt nur noch ein
Zehntel so groß. Also bei der ersten Stelle nach dem Komma ein "Zehntel", dann
"Hundertstel", "Tausendstel" und so weiter.
14,25 kann man also auch schreiben als
1 * 10 +
4 * 1 +
2 * 0,1 +
5 * 0,01
Das ist im Zehnersystem natürlich trivial.
Im binären Zahlensystem ist alles genauso, nur eben zur Basis 2. Die erste
Stelle vor dem Komma hat folglich die Wertigkeit 1 und diese verdoppelt sich mit
jedem Schritt, also 2, 4, 8,...
Genau umgekehrt geht's hinter dem Komma: Mit jedem Schritt halbiert sich
die Wertigkeit, beträgt also erst 0,5, dann 0,25, 0,125,...
1110,01 kann man also auch schreiben als
1 * 8 +
1 * 4 +
1 * 2 +
0 * 1 +
0 * 0,5 +
1 * 0,25
Was zusammengerechnet im Dezimalsystem exakt 14,25 ergibt.
Aus 14,25 dezimal wird also binär 1110,01. Da die Mantisse eine ganze Zahl sein
muss, wird das Komma ans Ende geschoben und die Verschiebung über den
Exponenten gekennzeichnet:
1110,01 = 111001 * 2-2
Dabei ergibt es sich, dass Zahlen, die im Dezimalsystem "glatt" sind, also wie z.B.
3,3 eine endliche Zahl von Nachkommastellen haben, im Binärsystem nicht endlich
darstellbar sind, d.h. mit einer Periode enden. Die werden dann zwangsweise
irgendwann abgeschnitten.
Auch das kann man sich recht leicht veranschaulichen:
Normalerweise macht ein Taschenrechner bei der Umwandlung einer
Dezimalzahl in eine Binärzahl folgendes: Er verdoppelt die Zahl
so lange im Dezimalsystem, bis sie keine Nachkommastellen mehr
hat. Er merkt sich, wie oft er das gemacht hat und das ist dann
der negative Exponent, den er abspeichert. Die Zahl selbst wird
dann ins binäre Format gewandelt.
Bei 14,25 macht er also folgendes:
14,25 * 2 = 28,5
28,5 * 2 = 57
57 ist im Binärsystem 111001
der Exponent ist -2, weil man zwei mal verdoppeln musste.
Das ist das Ergebnis, das wir ja bereits kennen.
Wenn man dasselbe mit 3,3 versucht, erlebt man eine Überraschung:
3,3 * 2 = 6,6
6,6 * 2 = 13,2
13,2 * 2 = 26,4
26,4 * 2 = 52,8
52,8 * 2 = 105,6
105,6 * 2 = 211,2
211,2 * 2 = 422,4
422,4 * 2 = 844,8
844,8 * 2 = 1689,6
1689,6 * 2 = 3379,2
3379,2 * 2 = 6758,4
6758,4 * 2 = 13516,8
13516,8 * 2 = 27033,6
27033,6 * 2 = 54067,2
Die Zahl macht gar keine Anstalten, irgendwann mal keine Nachkommastelle
mehr zu haben. Wenn unser Taschenrechner jetzt mit 16 Binärstellen arbeitet,
passt da aber als größte Zahl gerade mal 2^16-1, also 65535 hinein, d.h. bei einer
weiteren Verdoppelung könnte er die Zahl nicht mehr speichern. Deswegen
bricht er jetzt ab und verwirft die Nachkommastelle. Gespeichert wird
also
54067 * 2-14, weil wir 14 mal verdoppelt haben. Binär ist das
1101001100110011 * 2-14
Wenn man das nun ins Dezimalsystem zurückwandelt, ist durch das
Abschneiden der Nachkommastelle folgendes aus unserer 3,3 geworden:
3,29998779296...
Mit 16 Bits haben wir also gerade mal eine Genauigkeit von 4
Nachkommastellen erreicht. Ein realer Taschenrechner hat daher ein
wesentlich breiteres Rechenwerk.
Der Taschenrechner rechnet mit so vielen Binärstellen, dass die Genauigkeit
typischerweise etwa eine Dezimalstelle größer ist als der Anzeigebereich des
Rechners. Wenn aber durch mehrere Operationen hintereinander sich die
Rundungsfehler aufschaukeln, können sich diese quasi bis auf die letzte
Anzeigestelle "vorarbeiten", was dann zu solch seltsamen Ausgaben wie der
49,99999998 in unserem Beispiel vom Anfang führt.
Ein moderner Taschenrechner mildert das Problem, indem er so viele Binärstellen
verwendet, dass die Genauigkeit z.B. etwa drei Dezimalstellen größer ist als
der Anzeigebereich. Dann treten solche Effekte viel seltener zu Tage. Das
ändert aber nichts daran, dass der Taschenrechner viele Aufgaben, die man im
Kopf mühelos exakt lösen kann, prinzipbedingt nur ungenau hinbekommt.
(angeregt durch eine Mail von Ann-Christin Rolfes)
|
|