Addition und Subtraktion im Stellenwertsystem

Im Folgendem wird der Algorithmus besprochen, mit dessen Hilfe zwei Zahlen, die durch ein Stellenwertsystem dargestellt werden, addiert oder subtrahiert werden können. Die eigentliche Addition sowie die eigentliche Subtraktion werden ohne Beachtung der Vorzeichen umgesetzt, da z.B. eine Addition mit negativem Vorzeichen als Subtraktion gesehen werden kann. Um dies zu ermöglichen, ist es notwendig, die Zahlen vergleichen zu können.

Umwandlung zwischen Addition und Subtraktion

Addition und Subtraktion vorzeichenbehafteter Zahlen (im Folgendem x und y genannt) lassen sich durch einfache Vergleiche ineinander überführen. Damit ist es möglich, sich bei der Addition/Subtraktion keine Gedanken über das Vorzeichen machen zu müssen. Zusätzlich sollte noch bedacht werden, dass die Implementierung einer Routine für die Subtraktion deutlich einfacher fällt, wenn bei Aufruf der Routine feststeht, welche Zahl den größeren Absolutwert hat. Alles in allem gilt es folgende Fälle zu unterscheiden:

Addition

x und y haben das selbe Vorzeichen

Besitzen beide Zahlen das selbe Vorzeichen, so kann einfach der Absolutwert der beiden Zahlen addiert werden und das gemeinsame Vorzeichen übernommen werden. Beispiel:

x = 5
y = 3
x+y = + ( 5+3 ) = +8

x = -1
y = -7
x+y = - (1+7) = -8

x und y haben unterschiedliche Vorzeichen

Unterscheiden sich beide Zahlen im Vorzeichen, so ist die Addition durch eine Subtraktion zu ersetzen. Dazu muss zuerst festgestellt werden, welche der beiden Zahlen den größeren Absolutwert besitzt. Von dieser wird dann die kleinere subtrahiert. Das Vorzeichen der vom Absolutwert her größeren Zahl wird dann als neues Vorzeichen übernommen. Beispiele aller Fälle:

x = 5
y = -3
x+y = + (5-3) = +2

x = -6
y = 3
x+y = - (6-3) = -3

x = 1
y = -7
x+y = - (7-1) = -6

x = -1
y = 4
x+y = + (4-1) = +3

Haben beide Zahlen den selben Absolutwert, dann ist das Ergebnis gleich 0.

Subtraktion

 TODO

Rechnen mit den Absolutwerten

Vorzeichenlose Addition

Die vorzeichenlose Addition ist generell ein sehr einfaches Verfahren. Zunächst muss die maximale Anzahl an Stellen des Ergebnisses berechnet werden. Dazu nimmt man die Stellenzahl der größeren Zahl (die größere Stellenzahl) und addiert eine Stelle dazu, die einen möglichen Überlauf abfangen soll.

Nun beginnt man damit, die niedrigsten Stellen der beiden Summanden zu addieren. Das Ergebnis übernimmt man als niedrigste Stelle der Summe. Einen eventuellen Überlauf über den Maximalwert, der in einer Stelle gespeichert sein darf fängt man ab und speichert ihn in die nächst höhere Stelle der Summe. Um einen Überlauf abzufangen muss der zu große Wert nur durch den Maximalwert dividiert werden, um den Überlauf zu erhalten. Der zu große Wert modulo des Maximalwerts ergibt dann den „neuen“ Wert, welcher in die aktuell bearbeitete Stelle geschrieben wird. Daraufhin werden die nächst höheren Stellen der Summanden (nicht vorhandene Stellen bei einer Zahl werden mit dem Wert 0 gehandelt) jeweils addiert und anschließend zu dem eventuell schon in der aktuellen Stelle der Summe gespeichertem addiert. Auch hier gilt es natürlich Überläufe abzufangen.

Beispiel im 10er-System:

x = 5 | 6 | 1
y = 6 | 9

Zunächst wird berechnet, wie viele Stellen das Ergebnis maximal benötigen wird. Die Zahl x hat 3 Stellen, y hat weniger Stellen. Also nimmt man die 3 Stellen der Zahl x und fügt noch eine Stelle an, um einen eventuellen Überlauf aus der höchsten Stelle der Zahl x abfangen zu können.

x + y = 0 | 0 | 0 | 0

Nun werden die jeweiligen Stellen addiert, beginnend mit der niedrigsten Stelle. Übersteigt das Ergebnis den Maximalwert, so muss dieser Überlauf verarbeitet werden.

x + y = 0 | 0 | 0 | 0 + (9+1)
x + y = 0 | 0 | 1 | 0

Nun wird die nächste Stelle addiert:

x + y = 0 | 0 | 1 + (6+6) | 0
x + y = 0 | 1 | 3 | 0

Und die letzte:

x + y = 0 | 1 + (5+0) | 3 | 0
x + y = 0 | 6 | 3 | 0

Die zusätzliche Stelle war überflüssig, da sie keinen Überlauf aufnehmen musste. Sie sollte also entfernt werden:

x + y = 6 | 3 | 0

Vorzeichenlose Subtraktion

Um vorzeichenlos eine Subtraktion zweier Zahlen durchführen zu können, muss sichergestellt werden, dass kein Wechsel des Vorzeichens notwendig wird. Zu diesem Zweck muss von der größeren Zahl subtrahiert werden. Zu diesem Zweck wird zunächst die größere Zahl in das Ergebnis kopiert. Anschließend wird, beginnend mit der niedrigsten Stelle, stellenweise subtrahiert. Ist der Subtrahend größer als der Minuend, so muss der ursprüngliche Minuend vom ursprünglichem Subtrahenden abgezogen werden und dieses Ergebnis anschließend vom Maximalwert der Stelle. In diesem Fall muss auch ein Überlauf an der nächst höheren Stelle berücksichtigt werden.

Ein Beispiel im 10er-System:

x = 3 | 4
y = 1 | 2 | 3
x - y = ?

Zunächst muss Subtrahend und Minuend vertauscht werden, damit die Rechenoperation vorzeichenlos durchführbar ist. Der Wert des Minuenden wird in das Ergebnis kopiert.

y - x = 1 | 2 | 3

Nun wird, beginnend mit der letzten Stelle subtrahiert. Da in diesem Fall dabei ein negativer Wert entstehen würde, muss die Differenz zwischen beiden vom Maximalwert abgezogen werden, um das richtige Ergebnis zu erhalten. Der Überlauf ist in der nächst höheren Stelle mit zu berechnen, wobei darauf geachtet werden muss, dass durch Einrechnung des Überlaufs ein erneuter Überlauf entstehen könnte.

y - x = 1 | 2 | (3 - 4)
y - x = 1 | 2 | 10 - (4-3)
y - x = 1 | (2-1) | 9
y - x = 1 | 1 | 9

Ist eine Stelle abgearbeitet, wird mit der nächsten fortgefahren:

y - x = 1 | (1 - 3) | 9
y - x = 1 | 10 - (3-1) | 9
y - x = (1-1) | 8 | 9
y - x = 0 | 8 | 9

Zum Schluss sollten führende Nullen entfernt werden.

y - x = 8 | 9

Mögliche Problemfälle

Geschwindigkeit und Laufzeitanalyse