Transrapid-Fahrwegträger – Konstruktion in Modulbauweise, Träger

Werbung
Hermann Flessner
Aus der Festschrift für das Symposium im Jahre 2006 des
Deutschsprachigen Studienganges Wirtschaftsinformatik
„Konrad Zuse“ an der Universität Szczecin / Stettin
Numerik in digitalen Methoden
Zusammenfassung: Für Rechenaufgaben aller Art verwenden wir heutzutage
Computer mit Programmen, welche die kompliziertesten Algorithmen in jeder geforderten Genauigkeit verarbeiten. Da derartige Programme immer seltener vom
Benutzer selbst geschrieben werden, sondern aus Programmbibliotheken stammen,
kann er die Abläufe kaum noch durchschauen. Gerade sehr komplexe Programme
werden dabei meistens mit großer Rechensicherheit durchgeführt, sehr einfache
überraschenderweise häufig aber nicht.
Mit der vorliegenden Arbeit soll eine Artikelserie über digitale Methoden eingeleitet und der Einstieg in das Verständnis der Problematik vorbereitet werden. Bei der
Codierung mathematischer Regeln lassen sich nämlich Kunstgriffe über digitale
Methoden anwenden und dabei gleichzeitig Fehlrechnungen vermeiden.
Einleitung
Bei unseren alltäglichen Rechenaufgaben sind den meisten jungen, hoch zivilisierten Menschen Fähigkeiten wie Kopfrechnen weitgehend abhanden gekommen oder gar nicht erst beigebracht worden. Man beobachte im Supermarkt, wie manchmal Damen im Rentenalter jungen Verkäuferinnen schnell und sicher nachweisen, daß sie sich beim Eingeben der Preise in
die Kassentastatur vertippt haben. Junge Leute haben eben heute Taschenrechner. Das Vertrauen in diese modernen Recheninstrumente ist zwar bestimmt gerechtfertigt, doch muß man
sie sicher bedienen können und im passenden Augenblick auch zur Hand haben – so weit, so
gut.
Unsere allgegenwärtigen Computer, besonders PC's oder Notebooks, verdienen solches Vertrauen wohl ebenfalls. Jedenfalls wenn man sicher sein kann, daß auch deren Programmierung richtig ist. Dabei sind aber gerade bei Programmen und Betriebssystemen, die in letzter
Zeit entstanden sind, interessante Ungereimtheiten festzustellen. Geht man diesen auf den
Grund, findet man meistens heraus, daß gewisse Fehler gar nicht infolge falscher Bedienung
oder Programmierung hervorgerufen wurden, sondern durch Mißachtung gewisser Regeln für
die numerische Verarbeitung bei der mathematischen Aufbereitung der zu programmierenden
Formeln. Oft hat man einfach auf die immens großen Gültigkeitsbereiche und Genauigkeiten
der im Computer verarbeiteten Zahlen vertraut. Daß Divisionen sehr großer durch sehr kleine
Zahlen auch heute noch problematisch sind, hat man wohl verdrängt. Man denkt vielleicht, ob
das überhaupt noch sein kann? Bei Zahlengültigkeiten in Bereichen zwischen 10-99 und 10+99,
wie sie heute in jedem Taschenrechner eingehalten werden? Man stelle sich 10+99 als Zahl mit
101 Stellen und 100 „Nullen” vor 1 . Sie würde ausgeschrieben 1½ Zeilen dieses Textes in
Anspruch nehmen. Da kann doch gar nichts schief gehen, oder etwa doch? – In diesem Beitrag soll gezeigt werden, wie leicht man schon bei einfachen Rechenvorgängen eines Besseren belehrt wird und welche Folgen sich daraus ergeben können.
Zu Beginn sei das Grundsätzliche des Zahlenrechnens kurz in Erinnerung gebracht und herausgestellt, welche Konsequenzen KONRAD ZUSE schon als junger Mann im Alter von 25
Jahren bei seinen bahnbrechenden Arbeiten zog, als er das halblogarithmische Zahlensystem
für seine ersten Rechenwerke und dann für alle folgenden Rechenautomaten als richtungwei1
Ein Google ist die Zahl 10100, nach MILTON SIROTTA, der den Namen 1938 erfand, siehe Wikipedia.
Seite 1 von 12
send wählte und anpaßte. 2 Im Übrigen war man sich der rechnerischen Problematik in den
Anfängen der Computerprogrammierung sehr wohl bewußt. Die im Computer verarbeitbaren
Zahlen waren noch nicht so groß wie heute und man hatte stets die Gefahr einer „Division
durch Null” im Auge. Es wurden auch schon sehr geistreiche Rechenkniffe, besser Programmierkniffe entwickelt, um dieser Gefahr auszuweichen. Da die heutigen Programmierer die
angedeuteten Stolpersteine der Numerik oft nicht mehr ernst zu nehmen scheinen, soll mit
diesem Aufsatz das dazu nötige Bewußtsein wieder geschärft werden.
Grundlagen der Zahlenrechnung
Seit der Mensch rechnet, benutzt er hilfsweise auch heute noch oft seine Finger, und sei es
nur zum Zählen. Auch verschiedene Zahlensysteme sind seit Jahrtausenden bekannt. Daß
man schon immer unterschiedliche Symbole verwendet hat, ist dabei für den Rechner eigentlich eine Nebensache, denn Rechen-Regeln sind von den Symbolen letztlich unabhängig. Unser heute allgemein gebräuchliches Zahlensystem hat zehn Ziffern, dargestellt durch die
Symbole von 0 bis 9. Für anspruchsvolle Berechnungen übrigens weltweit; denn auch die
Chinesen und Japaner und viele andere Völker mit eigenen Zahlensymbolen verwenden diese
Ziffern, wenn sie überall gelesen und dabei verstanden werden wollen. Man hat sich stillschweigend auf sie geeinigt. Zugrunde liegt das indisch-arabische Dezimalsystem mit Ziffer
„Null” und mit Stellenwertigkeit, heute kurz arabische Zahlen genannt. Im Abendländischen
Kulturkreis haben sie sich gegenüber dem römischen System (übrigens auch ein Dezimalsystem) mit seinen Ziffern I, X, C, M, deren Halbwerten V, L, D und daraus gebildeten Zusammensetzungen, als brauchbarer erwiesen und durchgesetzt. Auch das weiß ein jeder, der mit
römischen Zahlen gerechnet und nicht nur gezählt hat.
Während der hinter uns liegenden Jahrtausende gab es als Unterstützung für das alltägliche
Rechnen neben unseren Fingern und Zehen auch Steinchen, Perlen oder Knoten als Zählelemente. Seit etwa 1100 v. Chr. sind die als „Suanpan” oder „Soroban” in Ostasien gebräuchlichen Rechenhilfsmittel bekannt, mit denen schon umfangreichere Rechenarbeiten erledigt
werden konnten. Ähnlich wie diese sind die „Stschoty” in Rußland noch heute weit verbreitet
– Rechenkugeln, zumeist farbige, die auf horizontal übereinander angeordneten Metallstangen beim Rechnen hin und her geschoben werden, wobei diese Metallstangen in einem
Rechteckrahmen stecken. 3 Wer z.B. in Odessa eine Fahrkarte kauft, sieht solche dort im
Bahnhof an fast jeder Verkaufsstelle. Auch der Abakus gehört in diese Klasse.
Für das Zehnersystem wurde bei Zahlen größer als 9 mit der nächsten Addition einer positiven Zahl > 0 (größer als 0) ein Stellenüberlauf eingeführt. Wir benötigen also schon beim
einfachen Zählen zusätzliche Stellen, wenn wir mehr als 9 Gegenstände, sagen wir Einheiten,
zusammenzählen oder aufaddieren wollen, darum Stellenwertigkeit. Die benötigten weitergehenden Rechenregeln hat der erste Rechenlehrer der Deutschen, ADAM RISE 1574 in seinem
„Rechenbuch” zusammengestellt. 4 Er hatte das Zehnersystem im deutschsprachigen Raum
zwar nicht eingeführt, aber allgemein bekannt gemacht.
Es gab aber schon seit langer Zeit andere Zahlensysteme, solche mit mehr als 10 und auch
mit weniger als 10 Ziffern. Zum Teil kannte man sie bereits vor dem Zehnersystem. Das
Zwölfersystem oder Duodezimalsystem wird heute noch im angelsächsisch geprägten Kulturraum oft verwendet. Es ist nicht ganz „komplett”, weil es bei zwölf Zahlengrößen von Null
bis Elf mit nur zehn Symbolen auskommen muß. Gleiches gilt für das in der Computertechnik
2
Zuse, K.: „Der Computer mein Lebenswerk”, Springer-Verlag, 3. Aufl. 1993.
W. de Beauclair „Rechnen mit Maschinen”, Friedr. Vieweg & Sohn GmbH, Verlag, Braunschweig, 1968.
4
Adam Rise: „Rechenbuch”, Nachdruck der Ausg. v. 1574,
© 1992 Edition »libri rari« im Verlag Th. Schäfer, Hannover.
3
Seite 2 von 12
benutzte Hexadezimalsystem mit seinen Zahlen Null bis Fünfzehn. Der Vorteil beim Zwölfersystem liegt im alltäglichen Gebrauch darin, daß man die Zahl Zwölf, bei der ein Stellenüberlauf stattfindet, durch die Zahlen 2, 3, 4, und 6 ohne Rest teilen kann (Teilung durch „1” ausgeschlossen) – beim Zehnersystem geht das nur mit den Zahlen 2 und 5. In der Mathematik
verwendet man für die fehlenden Ziffern in den beiden vorgenannten Systemen Lateinische
Großbuchstaben A, B, C, … Im Zwölfersystem also die Ziffern 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A,
B, im Sechzehnersystem die Ziffern 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Es ist zwar
ungewöhnlich, wenn auch schwierig, jedoch möglich, mit beiden Systemen alle im Dezimalsystem gebräuchlichen arithmetischen Operationen auszuführen. Dieses gilt auch für Systeme
mit weniger als zehn Ziffern, z.B. dem Oktalsystem, dem Quinärsystem, um nur die beiden
zu nennen, die in der Computertechnik heute wieder eine bedeutende Rolle spielen.
Eine Sonderstellung nimmt das Dual- oder Binärsystem ein. Man kann mit ihm nicht nur ebenfalls alle Rechenoperationen durchführen, die wir im Dezimalsystem verwenden, sondern
zusätzlich Operationen der mathematischen Logik, man kann mit dem Binärsystem also mehr
als mit dem Dezimalsystem. Dieses mehr hatte ZUSE erkannt und folgerichtig als Entwurfsgrundlage für seine Steuer- und Rechenwerke verwendet. Er konnte Arbeiten nutzen, die insbesondere GOTTFRIED WILHELM LEIBNIZ (1646 - 1716) schon veröffentlicht hatte. Leibniz
nannte das Binärsystem das Dyadische System, welches heute dank ZUSE als Basis für die
Schaltalgebra moderner Rechenautomaten verwendet wird. In seinen frühen Quellenstudien
stieß ZUSE außerdem auf die Arbeiten von GEORGE BOOLE (1815 - 1864), dem Begründer des
heute so genannten Aussagekalküls.
Von den ganzen Zahlen zur halblogarithmischen Zahlendarstellung
Wir wollen die folgenden Definitionen und Betrachtungen einschränken auf solche Zahlensysteme, die als Grundlagen der digitalen Informationsverarbeitung gelten. Beginnen wir mit
den beiden Definitionen:
1)
digitus m → Finger m,
davon abgeleitet, Rechnen mit den Fingern
als kleinster Recheneinheit.
Man hat in frühen Zeiten zwar mit unterschiedlichen Fingerhaltungen und auch halben Fingern etc. gerechnet, dieses ist aber heute weitgehend unbekannt und soll deshalb nicht weiter
betrachtet werden. 5
2)
binär
→ „zweier Zustände fähig”.
Damit wurde das binäre System die Grundlage des Rechnens mit den beiden Schaltzuständen
„ein” und „aus”, der Aussagevariablen „ja” und „nein” und, wie heutzutage üblich, das
Rechnen mit L und 0 .
Bei den Zahlen werden wir unterscheiden zwischen den Definitionen, wie sie einerseits beim
konventionellen Rechnen ohne Computer gelten:
5
Jacob Leupold: „Theatrum Arithmetico Geometricum”, Nachdruck der Ausg. v. 1727, Leipzig,
herausgegeben 1982 von der Edition »libri rari« im Verlag Th. Schäfer, Hannover.
Seite 3 von 12
3)
natürliche Zahlen
4)
ganze Zahlen
5)
rationalen Zahlen
1, 2, 3, … ,
ohne Null, also wie man sie vorwiegend
beim Zählen gebraucht,
… -3, -2, -1, 0, 1, 2, 3, …
… -3,5
-2,8
-1,1
0, 1,4
2,7
3,1 …
und solchen, wie sie für Computer bezüglich Darstellung, interner Verarbeitung und Programmierung definiert sind.
Zahlen in Computern:
6)
ganze Zahlen wie unter 4),
aber rationale Zahlen als
7)
halblogarithmische Zahlen nach der Formel
Y = b × 2a ,
(1)
darin ist a als Exponent der Basis 2 der ganzzahlige Teil des Logarithmus von Y .
In Computern wird bei der internen Rechnung also unterschieden zwischen
ganzen Zahlen für das eigentliche Zählen, für Indizes und für das Rechnen
in und mit BOOLE'schen Ausdrücken
und
halblogarithmischen Zahlen, bei denen wiederum unterschieden wird zwischen solchen, die
über Drucker, Plotter oder Sichtschirm mit fest positioniertem Komma ausgegeben werden,
genannt
Festkomma- oder Festpunkt-Zahlen,
Beispiel:
±3579.2468
Beispiel:
±0.3579246810+04 ,
oder
Gleitkomma- oder Gleitpunkt-Zahlen,
auch geschrieben
±0.35792468E+04 .
Um endlich zum Kern der Frage zu gelangen, wie sich denn die maschineninternen Genauigkeits- und Gültigkeitsbereichs-Grenzen der vorbeschriebenen Zahlen ergeben, müssen wir
uns mit der internen Abbildung und Speicherung im Computer befassen. Wir verwenden dafür eine Modell-Zelle in einer Gliederung, wie sie von ZUSE in seinen Rechenanlagen ab dem
Typ Z11, also nach ungefähr 1955, benutzt wurde, allerdings mit mehr Bits (binary digits) als
wir sie jetzt benötigen. Diese Zellenaufteilung wurde inzwischen in praktisch alle modernen
Computer und Prozessoren übernommen, mit nur unbedeutenden Abweichungen, und gelten
heute noch.
Seite 4 von 12
Danach gibt es vier Zellinhaltstypen, hier mit 12 Bits als Modell-Zelle
Positive ganze Zahlen:
0
0
0
z.B.
0
0
VZ.
L
L
64
32
99
0
größte positive ganze Zahlen hier:
0
0
VZ.
L
L
(512) 256
0
0
L
L
2
1
1023
L
L
L
L
L
L
L
L
128
64
32
16
8
4
2
1
Bei positiven ganzen Zahlen geben hier zwei Bits das Vorzeichen der Zahlen an, also das
Pluszeichen, dargestellt durch die beiden links angeordneten, grau unterlegten Felder – man
könnte dafür grundsätzlich andere Felder wählen, wie es bei einigen Computerfabrikaten
auch gemacht wird. Somit verbleiben bei unserer Modell-Zelle 10 Bits für die eigentliche
Darstellung des Zahlenbetrages. Bei der Zahl „Null” sind alle Bits mit 0 belegt.
Negative ganze Zahlen:
L
„Flüchtige Eins“ L
L
L
z.B.
L
L
L
-14
L
L
VZ.
größte negative ganze Zahlen hier:
L
VZ.
L
0
0
(512) 256
0
0
8
4
L
0
1
-1024
0
0
0
0
0
0
0
0
128
64
32
16
8
4
2
1
Negative Zahlen haben in beiden Vorzeichenfeldern die binäre „Eins” L , die Zahlenbeträge
werden als ihre Komplementwerte eingesetzt. Zur Veranschaulichung stelle man sich vor, es
seien alle 12 Bitfelder mit 0 besetzt (einschl. Vorzeichen) und am linken Ende die sog.
flüchtige Eins vorangestellt 6 , siehe oben, dann ergäbe das L000000000000 (bitte nachzählen). Davon würde der Betrag „Eins”, also L abgezogen, das würde dann die komplementäre
Eins ergeben, nämlich LLLLLLLLLLLL . Darin sind die beiden Vorzeichen-Bits LL am linken Ende automatisch enthalten.
Noch einmal:
„flüchtige Eins”
–
VZ
Betrag
L|00|0000000000
L
|LL|LLLLLLLLLL
0
- 1
-1
Man versuche dasselbe mit anderen negativen ganzen Zahlen.
Bisher können wir ganze Zahlen im Bereich von – 1024 bis + 1023 verwenden, d.h. darstellen und errechnen. Zahlen, die im Laufe einer Berechnung größer als 1023 werden, passen
nicht mehr in unsere Modell-Zelle, sie erzeugen eine „Bereichsüberschreitung”.
6
… „flüchtige Eins” darum genannt, weil sie nur geschaltet, nicht aber gespeichert wird.
Seite 5 von 12
Wollen wir rationale Zahlen erzeugen, dann brauchen wir die halblogarithmische Darstellung, in etwa so, wie sie der junge KONRAD ZUSE vorgeschlagen und eingeführt hat.
Wir verwenden die grundlegende Formel (1), siehe oben. Darin bestimmt der Exponent a
die Größenordnung der Zahl Y , der Faktor b heißt Mantisse und bestimmt Zahlenwert und
Genauigkeit von Y .
0
0
L
0
L
0
L
0
L
b
VZ.
Mantisse
0,5
0,125
0,25
0,03125
0,0625
0,015625
0
0
0
a
Exponent
Σ = 0,65625
Die Vorzeichenstellen gelten wie vorher. Die Belegung der Mantisse ist wie folgt definiert:
Die linke Stelle ist 0,5, also 1 2 . Dann folgt rechts daneben davon die Hälfte, also 1 4 . Nach
rechts fortschreitend davon wieder die Hälfte = 1 8 und so weiter, also 1 16 , 1 32 und 1 64 .
Auch bei größeren Mantissen wird immer fortschreitend halbiert. Die Anzahl der Stellen hinter dem Komma wird dabei automatisch immer größer, die absoluten Beträge aber immer
kleiner. In der vorigen Abbildung sind die Werte als Dezimalbrüche eingetragen, man erkennt
die wachsende Stellenzahl.
In der Mantisse werden jetzt alle die Brüche addiert, deren zugehöriges Zellenbit mit L belegt ist, im obigen Bild fett kursiv gedruckt; die Summe ist rechts daneben angegeben. Damit
ist b bestimmt. Nun folgt die Multiplikation mit dem Exponenten a , genauer, mit der Zweierpotenz. Die Basis 2 ist im Rechenwerk fest „verdrahtet”, wie es bei Zuse-Anlagen hieß 7 .
In den Zellenbits steht nur L oder 0, je nachdem welche Zweierpotenz gerade gilt.
Um ein Extrabit für das Vorzeichen des Exponenten zu sparen, wird eine Art Bezugsverschiebung vorgenommen. Danach gilt als Definition des Exponentenbereiches: − 8 ≤ aˆ < +7
bei a = 8 + aˆ . Deshalb ist das Exponentenbit ganz links in der Grundbelegung mit L besetzt,
das ergibt die binäre 8 = L000. Würde man bei 4 Bits wie hier eines für das Vorzeichen des
Exponenten verwenden, dann hätte man nur drei übrig für die Zweierpotenzen. Das erscheint
heutzutage knauserig, führte aber zu Zeiten teurer Magnetkernspeicherplätze zu spürbarer
Reduzierung der Herstellungskosten. Heute macht man so etwas natürlich nicht mehr. –
Rechnet man die Inhalte des vorigen Zellenbeispiels zuende, das ergibt das als rationale Zahl
0,65625 × 2 0 = 0,65625 × 1 also 0,65625.
Hier muß jetzt auf eine Besonderheit hingewiesen werden. Der kritische Leser wird gemerkt
haben, daß bisher nicht zwischen ganzen und halblogarithmischen Zahlen unterschieden werden kann. Um dies zu ermöglichen, ist festgelegt, daß das dritte Bit von links bei halblogarithmischen Zahlen immer mit L, also dem Dezimalbruch 0,5 besetzt ist, bei ganzen Zahlen dagegen mit 0. Darum müssen wir jetzt das erste Beispiel mit unserer 12-Bit-ModellZelle korrigieren: dort muß das dritte Bit von links immer eine 0 sein, daran wird der Inhalt
nämlich als ganzzahlig erkannt. Deshalb kann dieses Bit nicht mitgezählt werden und für die
Zahlendarstellung geht es verloren. Die größte positive ganze Zahl ist also 511 (nicht 1023)
und die vom Betrage her größte negative Zahl 512 (nicht 1024). Darum sind in den ersten
vier Zellenbeispielen die Werte 512 auch in Klammern gesetzt.
7
In neueren, vor allem großen Computern sind statt 2 oft auch die Basis 4, 8, oder 16 fest gespeichert.
Das macht allerdings nur Sinn, wenn gleichzeitig sehr viele Mantissenstellen vorgesehen sind.
Seite 6 von 12
Man versteht nun leicht die nächsten drei Beispiele.
0
0
Dieses ist die +1,0:
L
0
0
0
0
0
L
0
0
0,5
L
1
Hier die in einer 12-Bit-Zelle überhaupt darstellbare größte , positive rationale Zahl:
0
0
L
L
L
L
L
L
L
L
L
L
0,984375
×
128 = + 126
Und schließlich die in einer 12-Bit-Zelle darstellbare kleinste, positive rationale Zahl:
0
0
L
0
0
0
0
0
0
0
b
VZ.
0
a
×
0,5
0,25
0,125
0,5
1
=
256 512
=
0
1
256
0,0625
0,015625
0,03125
0,001953125 .
Hat man sich mit den vorstehenden Ausführungen vertraut gemacht, dann versteht man sehr schnell
die Vorteile für das praktische Rechnen. Zur weiteren Veranschaulichung soll uns ein Zahlenstrahl
dienen. Wir verwenden den positiven Ast und deuten den negativen nur an, für ihn gilt letztlich das
gleiche.
Der abgedeckte Mantissenbereich b ist nach Addieren aller Inkremente:
+
−
0
0,5
1,0
2,0
3,0
0,5 + 0,25 + 0,125 + 0,0625 + 0,03125 + 0,015625,
das ist mit a = 20 = 1: 0,984375,
4,0
(siehe oben).
also um 0,015625 < 1,0.
1
Mit a = 2 , also dem Faktor 2 des obigen Mantissenbereichs, gilt dann folgender Bereich:
also um 0,03125
< 2,0.
Mit a = 22 , also dem Faktor 4 des obigen Mantissenbereichs, gilt untenstehender Bereich:
also um
0,0625 < 4,0 ,
und so weiter.
Man sieht, je weiter sich der betrachtete Zahlenbereich vom Zahlenursprung entfernt, desto
größer wird derselbe, desto größer wird aber auch die Ungenauigkeit. Verwenden wir aller-
Seite 7 von 12
dings negative Exponenten der Basis 2, also den Faktor a = 2-1 , was ist = 0.5, dann tritt
das Gegenteil ein, siehe nachfolgend die verlängerte vorige Zeichnung.
Die Bereiche werden kleiner, aber die Genauigkeit nimmt zu. Es gibt auch
kein Problem, wenn schließlich die „Null” erreicht wird, wie früher schon
beschrieben wurde. Gelangen wir schließlich zur kleinsten darstellbaren
Zahl, die wir schon berechnet hatten, nämlich 0,001953125, und ziehen
noch ein Bit ab, dann muß am Ende auch das Bit verschwinden, welches in
unserer Modell-Zelle, an der dritten Stelle von links, bisher den Mantissenwert 0,5 hatte und außerdem als Unterscheidungsbit genutzt wurde. Wir erhalten automatisch die „Null”, die logischerweise für ganze Zahlen ebenso
wie für rationale Zahlen gilt.
Daß das soeben Erläuterte auch ohne Einschränkung gilt, wenn wir negative Zahlen haben,
also wenn wir uns auf dem Zahlenstrahl von links auf den Zahlenursprung zu bewegen, wurde schon gesagt.
Die Formel (1) wird deshalb ergänzt zu
Y = ± | b × 2a | .
Verlassen wir nun unsere Modell-Zellen und betrachten solche, wie sie ab 1960 in den ersten
transistorisierten Anlagen der ZUSE KG vom Typ Z 23 verwendet wurden. Diese hatten
Kernspeicher- und Trommelzellen mit einer sog. Wortlänge von je 40 Bits. Was bisher über
die Darstellung von ganzen und halblogarithmischen Zahlen gesagt worden ist, gilt weiterhin
uneingeschränkt, nur die jeweilige Anzahl der Bits ist größer.
Bei ganzen Zahlen gibt es zwei Vorzeichenbits und das eine Bit für die Unterscheidung ganzer und halblogarithmischer Zahlen, verbleiben also 37 Bits für die eigentlichen Zahlen. Diese können somit dargestellt werden im Bereich −237 ≤ X < +237 .
Ausgeschrieben ist das −137.438.953.472 ≤ X ≤ 137.438.953.471 .
Bei halblogarithmischen Zahlen gilt:
2 Vorzeichenstellen,
30 Mantissenstellen,
Dieses entspricht einem Zahlenbereich von
8 Exponent-Stellen.
0,210-38 ≤ Y ≤ 0,13421772710+39 .
Man mache sich klar, das sind
0,000000000000000000000000000000000000002 als kleinste Zahl
und
134217727000000000000000000000000000000,0 als größte Zahl,
heute meistens geschrieben:
0,2E–38 ≤ Y ≤ 0,134217727E+39 .
Wie wirkt sich dieses aus, wenn in einer Berechnung auf den Betrag einer sehr großen Zahl
eine sehr kleine Zahl addiert wird? Beispielsweise wenn auf eine astronomische Entfernung
von einem Lichtjahr = 9,4339623 × 1015 m, eine Länge von 500 m hinzugezählt wird?
Dann ist das in ausgeschriebener Darstellung:
9.433.962.300.000.000 + 500 = 9.433.962.300.000.500 m.
Kein Astronom wird diese 500 m berücksichtigen. Sie liegen weit unterhalb der normalerweise in der Astronomie interessierenden, womöglich nicht einmal erzielbaren Genauigkeit der
Messungen. Also werden die letzen Stellen mit Sicherheit gerundet, wobei die 500 m wegfallen. Dieses ergibt sich bei den arithmetischen Operationen halblogarithmischer Zahlen nach
ZUSE automatisch. Aber, wie wir gerade festgestellt haben, spielt das bei den Computern vom
Typ ZUSE Z23 noch keine Rolle, in Ihnen würde ein solcher Fall noch in allen Stellen zu
Seite 8 von 12
korrekten Ergebnissen führen. Bei Computern sieht man aber auch heute für den normalen
Ergebnisausdruck eine so große Stellenzahl gar nicht vor. Im Normalfall werden 9 Dezimalstellen gedruckt bzw. auf dem Sichtschirm angezeigt. Eine weitere wird nur für Rundungen
mitgeführt, aber nicht mehr ausgegeben.
Zeigen wir noch die Gültigkeitsbereiche in heutigen Computern:
0,2E–334 ≤ Y ≤ 0,134217727E+335 .
Bei Taschenrechnern und Uhren verwendet man einen als Massenprodukt in Ostasien hergestellten Chip, für das auch die Berechnung des Kalenders, des Datums und der Uhrzeit möglich ist. Darin gilt wie oben schon erwähnt der Bereich:
≈ 0,1E–99 ≤ Y ≤ ≈ 0,1E+99 .
Für Sonderanwendungen, z.B. bei astronomischen Berechnungen, wo es auf sehr große Zahlenbereiche (Entfernungen) ankommt, hatte man schon früh in großen Rechenanlagen die
Möglichkeit, die Anzahl der Bits im Exponentenbereich auf Kosten der Mantissen-Bits zu
vergrößern.
Auch bei ZUSE-Rechenanlagen ab dem Typ Z 22 war es möglich (hier dargestellt für eine
40 Bit-Zelle der Z 23) den Exponenten zu vergrößern, ebenfalls auf Kosten der Mantissenlänge. Normalerweise ging dieses durch Koppelung zweier Zellen zu einer mit dann 80 Bits.
Fest vorgesehen von der ZUSE KG, nämlich durch Eingeben eines speziellen Betriebsprogramms, waren folgende zwei Aufteilungen der gekoppelten Zellen möglich:
2
Mantisse 30
Exp. 8
2
30
8
Bits
zu
a)
2
Mantisse 38
Exp. 40
Bits
für größere Zahlen bei gleichbleibender Genauigkeit,
b)
2
Mantisse 70
Exp. 8
Bits
für Zahlen in dem normalen Bereich, aber mit extrem hoher Genauigkeit.
Der Autor hatte 1963 ein Unterprogramm für die Zuse Z 22 R entwickelt, mit dem die Mantissen- und Exponentenbereiche beliebig gegeneinander verteilt werden konnten, also auch
folgendes möglich war:
2
Mantisse zw. 30 und 70
Exp. zw. 8 und 40
Bits.
Bekanntlich hat man schon früh eine Zusammenfassung von 8 Bits zu einem Byte vorgenommen. Die Fa. IBM hat dieses um 1966 mit ihrem Extended Binary Coded Decimal Inter-
Seite 9 von 12
change-Code eingeführt (EBCDIC). Dieses war der erste echte 8 Bit Code (sein Prüfbit war
ein neuntes) zurzeit, als der IBM Code als Firmennorm zur Bezeichnung Byte führte.
Heute steht dafür auch ASCII (American Standard Code for Information Interchange). Das
Byte ist damit die kleinste Einheit zur binären Abbildung eines alphanumerischen Zeichens
von insgesamt 256 Zeichen aus der Menge des ASCII 8 .
In heutigen Computern sind die Speicherzellengrößen gegliedert in Vielfachem des Bytes.
1. 0,5 Byte
( 4 Bit)
Ausnahme in schnellen Prozeßrechnern,
2.
1
Byte
( 8 Bit)
3.
2
Byte
(16 Bit)
4.
3
Byte
(24 Bit)
in älteren Computern (vor 1985),
5.
4
Byte
(32 Bit)
1 Wort, in modernen sog. 32-Bit-Rechnern,
6.
6
Byte
(48 Bit)
7.
8
Byte
(64 Bit)
2 Worte.
Alle sind adressierbar, also jeweils über eine eigene Adress-Nr. erreichbar.
Hier sei angemerkt, daß die Gliederung bzw. Aufteilung der Zellen-Inhalte in Vorzeichenbereich, Mantissen- und Exponentenbereich i.d.R. nicht mehr wie bei ZUSE-Rechnern organisiert ist. Dieses hat aber nur in Ausnahmefällen Einfluß auf die Zahlendarstellung bzw. verarbeitung (beim Schiften zur Bildung von Mehrfachworten). Wir wollen hier nicht näher
darauf eingehen.
Nur der Vollständigkeit halber sei jetzt noch erwähnt, daß in den gleichen Zellen bei ZUSERechnern, und natürlich auch den meisten Rechnern anderer Fabrikate, Befehle (Anweisungen, statements oder instructions) und Texte untergebracht werden können. Um diese von
Zahlen unterscheiden zu können, werden die beiden ersten Bits von links benutzt nach folgender Regel:
L 0
Kennzeichen für Befehl,
0 L
Kennzeichen für Text.
VZ.
Folgerungen
In Rechenprogrammen gibt es, korrekt gesagt, keine mathematischen Gleichungen, sondern
nur Zuweisungen. Darauf hat ZUSE schon sehr früh hingewiesen. Von ihm stammt die Notation: 5 + 7 ⇒ 12, (heißt, ergibt 12) bzw. 12 ⇐ 5+7, (heißt, ergibt sich aus 5+7).
Der Programmierer kann und muß direkt Einfluß auf die Abfolge einzelner Operationen innerhalb eines Programmbefehls, genauer gesagt, innerhalb einer Rechenanweisung nehmen.
Dieses ist von entscheidender Bedeutung zur Verhinderung von unzulässigen Überschreitungen maximal zulässiger Zahlengrößen in Ergebnissen, auch in Zwischenergebnissen, und
zwar nicht nur dann, wenn sie in Computerzellen abgespeichert werden sollen.
Wenn die am Anfang in der Zusammenfassung und der Einleitung dieses Beitrages angedeuteten numerischen Schwierigkeiten in einem Programmlauf eintreten, dann liegt das in so gut
8
H. Zemanek: "Alphabets and Codes 1967 für Information Processing".
R. Oldenbourg Verlag München und Wien, 1967 (engl. u. deutsch).
Seite 10 von 12
wie allen Fällen daran, daß irgend eine Zahl innerhalb der Berechnung die von der zuständigen Speicherzelle aufnehmbare Größe überschritten hat. Dieses kann beim Summieren und
Multiplizieren geschehen (was selten vorkommt). Es kann auch beim Dividieren passieren
(was meistens der Fall ist), nämlich immer dann, wenn eine sehr große durch eine sehr kleine
Zahl geteilt wird. Es muß gar nicht immer gleich eine Division durch Null versucht worden
sein, die ja bekanntlich zu dem unbestimmten Wert ∞ führt und deshalb numerisch nicht geht.
Vielleicht wird der Leser dieses für eine Trivialität halten. Sie ist es eigentlich auch. Das ändert jedoch nichts daran, daß die soeben angedeuteten Fälle immer wieder auftreten, besonders natürlich bei komplizierten Formeln, bei deren Abwicklung man die einzelnen Zwischenstadien der Berechnung mit ihren Größenordnungen nicht leicht überschauen kann. Bei
seiner Doktordissertation wollte ein Kandidat nach einem Vierteljahr in heller Verzweiflung
aufgeben. Das im Rahmen seiner Arbeit von ihm selbst geschriebene Programm hatte formal
keine Fehler, blieb aber an einer bestimmten Stelle immer mit der gleichen gefürchteten overflow-Meldung stehen, auch bei großen Speicherwortlängen. Von den Ergebnissen hing der
Erfolg der Promotion ab. Die neuralgische Anweisung war genau lokalisiert, nichts war
falsch. Alle einzelnen in der betreffenden Anweisung zu berechnenden Werte hatten die speicherbare Größenordnung nicht überschritten. Was war die Ursache? Es war nur übersehen
worden, dass zwei Faktoren zur gleichen Zeit ihre Größtwerte annahmen. Deren Multiplikation führte dadurch zur Bereichsüberschreitung. Mit einer einfachen Umstellung konnte das
Problem gelöst werden. – Das Umstellen des Programms in einen Doppelwort-Modus, z.B.
vom 32- auf 64-Bit-Wort, hätte das Problem übrigens auch nicht nachhaltig behoben, der
Overflow wäre einige Schleifenzyklen später eingetreten.
Eine wichtige Regel sollte man sich für vergleichbare Fälle einprägen. Danach sollte grundsätzlich nie so gerechnet werden:
(a × b × c × d) / (e × f × g × h) ⇒ Resultat,
sondern so:
a / e × b / f × c / g × d / h ⇒ Resultat.
Allerdings hängt dieses auch davon ab, ob nicht ausgerechnet die Faktoren e, f, g, h zur gleichen Zeit sehr klein sind. Sicher ist das Problem jetzt auch für den Leser erkennbar. Entscheidend ist, daß man beim Programmieren arithmetischer Ausdrücke immer im Auge behält, ob und wann Bereichsüberschreitungen auftreten können und wie man sie mit Fallentscheidungen bzw. bedingten Anweisungen, oder durch einfache Umstellung der einzelnen
Zwischenoperationen, abfangen kann.
Leider gibt es wohl noch keinen Compiler oder Interpreter (im Jahre 2000), welcher automatisch eine Doppelwort-Arithmetik einschaltet und, wenn dieses nicht ausreicht, ebenfalls automatisch vor dem Overflow warnt, wenn die Werteentwicklung sich der Aufnahmegrenze
der Speicherzellen nähert. Es gibt auch noch keine Möglichkeit, das Programm mittels eines
dafür geschaffenen Befehls automatisch in einem Bruch kürzen zu lassen. Formal wäre so
etwas möglich.
Bei der Lösung großer Gleichungssysteme kann leicht der Fall der berüchtigten kleinen Differenzen großer Zahlen eintreten. Auch hierbei ist das Einschätzen der Werteentwicklung
keineswegs trivial.
Das Optimum stellen Verfahren dar, die aufgrund ihres Formelaufbaus die vorbeschriebenen
Probleme in digitalen Rechenautomaten, also in Computern, gar nicht erst auftreten lassen.
Sie haben sich in der Praxis bewährt und sollten in unserem weiteren Verständnis die eigentlichen Digitalen Methoden sein.
Seite 11 von 12
Kein Geringerer als CARL FRIEDRICH GAUSS strebte als genialer Rechenmeister bei seinen
Berechungen genau solche Methoden an und benutzte z.B. für seine „Methode der kleinsten
Quadrate“ den Begriff „ … geschmeidiger, für die wirkliche Anwendung geformter Calcul“ 9 .
9
Carl Friedrich Gauß. Werke, Band VI, S.54
Seite 12 von 12
Herunterladen