5 Wie rechnen "Rechner"? (2. Teil)

5.1 Schriftliches Multiplizieren im Zweier-System
5.2 Das Schiebe-Register
5.3 Eine Multiplizier-Schaltung
5.4 Wohin geht die Reise?

Zum vorigen Kapitel Zum Inhaltsverzeichnis Zum nächsten Kapitel


5.1 Schriftliches Multiplizieren im Zweier-System


Nachdem wir nun Addition und Subtraktion erfolgreich bearbeitet haben, können wir uns der Multiplikation zuwenden. Beginnen wir mit unseren eigenen Erfahrungen beim Erlernen des Multiplizierens.

Was muss jeder Schüler lernen, bevor er zwei mehrstellige Dezimalzahlen multiplizieren kann? Klar: das "kleine EinMalEins"! Ehe wir nicht (auswendig) wissen, was 3*7, 5*9 und die 98(!) anderen "Elementarprodukte" sind, brauchen wir mit dem schriftlichen Multiplizieren gar nicht anzufangen! Wir können das "kleine EinMalEins" sozusagen als Tabelle dieser Elementarprodukte a*b ansehen, wobei a und b jeweils beliebig aus der Menge der möglichen Ziffern gewählt wird, also aus {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}:

* 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9
2 0 2 4 6 8 10 12 14 16 18
3 0 3 6 9 12 15 18 21 24 27
4 0 4 8 12 16 20 24 28 32 36
5 0 5 10 15 20 25 30 35 40 45
6 0 6 12 18 24 30 36 42 48 54
7 0 7 14 21 28 35 42 49 56 63
8 0 8 16 24 32 40 48 56 64 72
9 0 9 18 27 36 45 54 63 72 81

Entsprechend sollten wir uns als erstes das "kleine EinMalEins" für die binären Zahlen hinschreiben. Was ist dafür zu tun? Wie bei den Dezimalzahlen müssen wir alle möglichen Produkte "a*b" hinschreiben, wobei a und b zwei beliebige Ziffern sind, jetzt aber aus der recht kleinen Menge {0, 1}. Und damit ist das "kleine EinmalEins" ziemlich überschaubar; es enthält nur die folgenden 4 Rechnungen:

0 * 0 = 0
0 * 1 = 0
1 * 0 = 0
1 * 1 = 1
was sich in Tabellenform viel übersichtlicher präsentiert:

* 0 1
0 0 0
1 0 1

Eine Schaltung, die zwei Bits A und B miteinander multipliziert, also E = A * B berechnet, müsste daher die folgende Wahrheitswert-Tabelle haben:

A B E
0 0 0
0 1 0
1 0 0
1 1 1

Erkennen Sie die Wahrheitswert-Tabelle wieder? Es ist die der AND-Schaltung! Zum Multiplizieren von zwei Bit-Werte benötigt man also nicht mehr als ein AND-Gatter - so einfach ist das!

Mit diesem Handwerkszeug können wir uns nun an eine konkrete mehrstellige Beispiel-Multiplikation machen. Wir nehmen die dezimale Rechnung 13*11, die in binärer Schreibweise 1101b*1011b heißt, und wir wenden das uns geläufige Verfahren der schriftlichen Multiplikation an, jetzt aber gleich auf die Binärzahlen:

1101 * 1011
    1101   
     0000  
      1101 
       1101
   10001111

Es ist offenbar kein Problem, die Zwischenzeilen der schriftlichen Multiplikation zu berechnen: wenn die aktuelle Multiplikatorstelle eine "1" ist, wird als "Zwischenprodukt" der Multiplikand (1101) eingefügt, falls die Stelle "0" ist, wird eine Null (0000) eingefügt - wobei wir diese Zeilen eigentlich auch gleich weglassen könnten.

Allerdings unterscheiden sich die verschiedenen Kopien des Multiplikanden in ihrer Wertigkeit; daher sollten wir die fehlenden Nullen im obigen Algorithmus zunächst einmal tatsächlich hinschreiben. Dann erhält man die folgende Darstellung:
1101 * 1011
    1101000
     000000
      11010
       1101
   10001111

Um uns den Algorithmus noch ein wenig deutlicher zu machen, sollten wir ihn nochmals etwas umformen. Machen Sie sich genau klar, wie man aus der vorhergehenden Darstellung die folgende bekommt:

1101 * 1011    
    1101000 * 1
     110100 * 0
      11010 * 1
       1101 * 1
   10001111    

Betrachten wir nun die Serie der Zwischenprodukte von unten nach oben, dann sehen wir dort den Multiplikanden, dem in jeder höheren Zeile eine Null mehr angehängt wurde. Dabei rutschen seine Ziffern immer weiter nach links, also in Richtung der höherwertigen Bits.

Was passiert mit einer Binärzahl, der wir eine Null anhängen? Betrachten wir ein Beispiel:
Die dezimale 11 hat die Binärdarstellung 1011b. Hängen wir eine Null an, dann erhalten wir 10110b. Dies übersetzen wir wieder in eine Dezimalzahl:
   10110b = ist 1*24 + 0*23 + 1*22 + 1*21 + 0*20 = 16 + 0 + 4 + 2 + 0 = 22.
Dies ist gerade das Doppelte der ursprünglichen Zahl, und wenn Sie ein wenig darüber nachdenken, werden Sie bemerken, dass das gar nicht anders sein kann.



Aufgabe:

  1. Was eine Null so alles kann....

    Beweisen Sie den folgenden Satz: "Wenn man an die Binärdarstellung einer natürlich Zahl a eine zusätzliche Null anhängt, dann erhält man die Binärdarstellung einer Zahl b, die gerade das Doppelte der Zahl a ist."
    Wenn Ihnen der allgemeine Fall zu schwer ist, können Sie sich ja zunächst mal auf Zahlen a mit 4 Binärstellen beschränken. Wenn Sie den Beweis für diesen Fall geschafft haben, sollte der für Binärzahlen mit 4000 Stellen auch nicht mehr schwer sein!
    Lösungsvorschlag




Wir nehmen also zur Kenntnis, dass für binär kodierte Zahlen eine Multiplikation mit 2 der Verschiebung aller Binärziffern um eine Stelle nach links entspricht. Die Multiplikation mit 2 ist nun der einzige Schritt im obigen Algorithmus, für den wir noch keine Implementierung in einer logischen Schaltung haben. Wie könnte eine solche Schaltung aussehen? Nun, wenn wir unseren Multiplikanden 1101 erst mal in ein 8-Bit-Datenregister laden, dann enthält es die Bitfolge "00001101". Nach einer Multiplikation mit 2 wäre die neue Bitfolge "00011010". Was passiert da? Jedes D-Flipflop in dem Register gibt seinen Dateninhalt an das direkt neben ihm stehende höherwertige D-Flipflop ab (sofern es ein solches gibt), und es lädt seinen neuen Dateninhalt von dem direkt neben ihm stehenden niederwertigeren D-Flipflop (sofern es ein solches gibt). Der Dateninhalt des MSB-Flipflops geht dabei verloren, das LSB-Flipflop erhält von außen eine "0" geliefert.

Das sind neue Anforderungen an unsere Register: sie sollen ihre Daten nach links (und vielleicht auch nach rechts?) "verschieben" können! Eine entsprechende Register-Schaltung, die diese zusätzlichen Funktionen des Verschiebens beherrscht, nennt man ein Schiebe-Register. Dazu müssen wir also die bisherige Register-Schaltung so ergänzen, dass jedes D-Flipflop des Registers seine Daten nicht nur von dem externen Daten-Eingang Di einlesen kann, sondern auch von dem Datenausgang eines benachbarten Registers. Das klingt nicht gar so kompliziert, wird sich jedoch als recht vertracktes Problem erweisen.





5.2 Das Schiebe-Register


Bei der Entwicklung einer neuen Schaltung geht man am besten von dem Stand der Dinge aus, den man bisher erreicht hat, und überlegt sich, mit welchen Ergänzungen man die noch fehlende Funktionalität implementieren könnte. Werfen wir also zuerst einen Blick auf unsere bisherigen Register: diese sind aus D-FlipFlops aufgebaut. Wie kann man einer Serie von D-FlipFlops die Funktionalität des "Verschiebens" ihrer Dateninhalte beibringen? Nun, probieren wir's einfach mal:

Wir entwerfen eine ganz einfache Schiebe-Register-Schaltung, bei der die Daten eines jeden FlipFlops vom Nachbar-FlipFlop kommen (sofern das vorhanden ist). Die folgende Simulation zeigt einen ersten Entwurf für ein solches Schiebe-Register aus 4 D-Flipflops, welche ihren jeweils neuen Inhalt von dem jeweils benachbarten D-Flipflop erhalten sollen. Lediglich das erste FlipFlop bekommt seinen neuen Inhalt "von außen" geliefert:


Wenn Sie mit dieser Schaltung einige Experimente gemacht haben, werden Sie enttäuscht sein: sie verhält sich überhaupt nicht so, wie wir es gerne hätten! Stattdessen erscheint das ins erste FlipFlop eingelesene Bit gleich auch in allen folgenden FlipFlops!

Dies ist in der Wirkungsweise eines D-FlipFlops begründet: solange der Takt-Eingang auf "1" liegt, wird ein am Dateneingang des D-FlipFlops anliegendes Bit in den internen Speicher übernommen -- und damit wird es auch sofort am Ausgang angezeigt! Da dieser aber mit dem Eingang des nächsten D-FlipFlops verbunden ist, wandert das Bit dann auch gleich in das zweite FlipFlop hinein, und von dort in das dritte.... und so werden alle D-FlipFlops des Registers mit demselben Bit-Wert beladen!

Die Wurzel des Übels ist, dass die Datenübernahme in ein D-FlipFlop das neue Bit sofort am Ausgang erscheinen lässt. Um dies zu vermeiden, haben kluge Techniker das "Master-Slave-FlipFlop" entwickelt: es besteht aus zwei hintereinander-geschalteten D-FlipFlops, die von einem gemeinsamen Takt gesteuert werden - aber auf eine recht trickreiche Art und Weise. Hier eine Simulation eines solchen Maste-Slave-FlipFlops:




Aufgabe:

  1. Das Master-Slave-FlipFlop - Speichern mit Verzögerung

    Machen Sie die Wirkungsweise eines Master-Slave-FlipFlops durch Experimente mit der obigen Simulation klar. Gehen Sie dabei von dem Grundzustand aus, in dem das erste FlipFlop eine "0" speichert, das (externe) Takt-Signal "0" ist und dann am (externen) Dateneingang eine "1" anliegt. Beantworten Sie dann die folgenden Fragen:
    1. Was passiert, wenn das (externe) Taktsignal auf "1" wechselt?
    2. Welches interne Taktsignal "sieht" das zweite D-FlipFlop?
    3. Was passiert, wenn das (externe) Taktsignal auf "0" zurückgeschaltet wird?
    4. Warum löst das Master-Slave-FlipFlop unser obiges Problem?
    Lösungsvorschlag




Wir packen nun die Schaltung des Master-Slave-FlipFlops ebenfalls wieder in eine "black box" und beschriften sie entsprechend mit "MS-FF" (statt "D-FF" wie bisher). Damit können wir nun den Bug "Durchschlagender Erfolg des 1. Input-Bits" beheben: wir müssen nur die D-FlipFlops in unserem Register durch Master-Slave-FlipFlops (kurz "MS-FF") ersetzen. Die folgende Simulation zeigt eine entsprechende Schaltung:





Aufgabe:

  1. Schieben im Schiebe-Register - jetzt aber richtig!

    Testen Sie die obige Simulation eines Schiebe-Registers, indem Sie folgende Vorgänge simulieren:
    1. Lassen Sie eine einzelne "1" durch das ganze Register wandern.
    2. Füllen Sie das Register mit lauter "1"-Werten.
    3. Wie kommt man möglichst schnell wieder zu einem Register, das nur "0"-Werte enthält?
    4. Schreiben Sie die Binärdarstellung der Dezimalzahl 6 in das Register! Welche naheliegende Frage über das Register müssen Sie dabei nicht beantworten, und warum?
    Lösungsvorschlag





Unser Schiebe-Register kann nun zwar seinen Dateninhalt intern verschieben, aber die klassische Register-Fähigkeit ist dabei auf der Strecke geblieben: das Schiebe-Register sollte ja nach wie vor auch mit von außen gelieferten Daten über die Input-Leitungen geladen werden können, also als gewöhnliches Register dienen! Wir haben also zwei mögliche Quellen für Daten, die in die einzelnen MS-Flipflops unseres Registers eingelesen werden sollen: entweder von außen kommende ("externe") Daten oder die ("internen") Daten des Nachbar-Flipflops. Was wir nun noch brauchen, sind Schalter, mit dem wir zwischen diesen beiden Signalquellen wählen können. Gesucht ist also eine Schaltung mit 2 Daten-Eingängen (E1, E2), einem Steuereingang W und einem Ausgang A, die der folgenden Wahrheitswert-Tabelle genügt:

E1 E2 W A
* * 0 E1
* * 1 E2

Dabei steht der Stern "*" für einen beliebigen Wahrheitswert.



Aufgabe:

  1. Ein Wahlschalter für Datenströme

    a) Machen Sie sich klar: diese Wahrheitswert-Tabelle beschreibt genau die Funktion, mit der wir zwischen den zwei verschiedenen Datenquellen für die MS-Flipflops in unserem Schiebe-Register wählen können! Entwerfen Sie dann eine entsprechende logische Schaltung, die diese Wahrheitswert-Tabelle implementiert. Ein Tip: Wenn Sie die Torsteuerung verstanden haben, sollte diese Aufgabe eigentlich nicht so schwierig sein!
    b) In Teil a) genügte 1 Steuerbit am W-Eingang. Wie aber würden Sie die Schaltung erweitern, wenn Sie statt zwischen 2 nun zwischen 4 verschiedenen Signalströmen wählen sollten? Bei der Lösung dieses Problems kann Ihnen Ihre Lösung zu Teil a) nützlich sein, wenn Sie gleich einen "Divide-and-Conquer"-Ansatz wählen! Es gibt aber auch hier wieder viele verschiedene Lösungswege, die zu teilweise sehr verschiedenen Implementierungen führen können.
    Lösungsvorschlag



Nun endlich haben wir alle Schaltungen beisammen, die wir für unser erstes voll funktionsfähiges Schiebe-Register brauchen. Wir müssen nur noch die Datenstrom-Schalter mit den MS-FlipFlops und den externen Eingängen richtig verdrahten.... Um die Sache abzukürzen, ist hier eine Simulation, die ein vollständig funktionierendes 4-Bit-Schiebe-Register zeigt:




Aufgabe:

  1. Das 4-Bit-Schiebe-Register

    Testen Sie die neue Schiebe-Register-Schaltung, indem Sie folgende Vorgänge simulieren:
    1. Lassen Sie eine einzelne "1" durch das ganze Register wandern.
    2. Füllen Sie das Register mit lauter "1"-Werten.
    3. Wie kommt man möglichst schnell wieder zu einem Register, das nur "0"-Werte enthält?
    4. Lassen Sie eine einzelne "0" durch das ganze Register wandern.
    5. Schreiben Sie die Binärdarstellung der Dezimalzahl 9 in das Register! Welche naheliegende Frage über das Register müssen Sie dabei nicht beantworten, und warum?
    Lösungsvorschlag



Diese Schiebe-Register-Schaltung ist nun also eine echte Erweiterung der im vorletzten Kapitel vorgestellten Register-Schaltung. Während aber die damalige Register-Schaltung nur 8 parallel angelieferte Bitwerte in 8 parallele D-FlipFlops schreiben konnte, ist das neue Schiebe-Register weitaus leistungsfähiger: es kann zwar auch noch Daten von parallelen Eingangsleitungen einlesen, darüberhinaus kann es aber die Daten auch intern um jeweils einen Stellenwert nach rechts verschieben.

Vielleicht ist Ihnen die Schaltung noch "zu klein": eine Speicherkapazität von nur 4 Bits ist tatsächlich ein wenig bescheiden. Aber die Erweiterung auf 8 Bit bietet nun keinerlei Probleme mehr: den bisherigen 4 Funktionsblöcken sind einfach 4 weitere derselben Art hinzuzufügen!

Wenn Sie hingegen auch die Möglichkeit haben wollen, den Dateninhalt nach links, also in Richtung höherer Stellenwerte zu schieben, dann müssen Sie die obige Schaltung noch einer ernsthaften Erweiterung unterziehen: es ist dann pro Stufe ein zusätzlicher Datenwahlschalter einzubauen, und zwar so, dass jedes MS-FlipFlop seinen neuen Dateninhalt entweder 1) von einer externen Datenleitung ("Data mode") oder 2) vom höherwertigen Nachbar-FlipFlop ("Shift-Right") oder 3) vom niederwertigen NachbarFlipFlop ("Shift-Left") übernehmen kann. Wir ersparen uns hier eine explizite Implementierung, denn in der obigen Aufgabe 4 wurde das Problem im Prinzip ja schon gelöst.

Dankbar nehmen wir hin, dass Generationen fleißiger Elektrotechniker die restlichen Detail-Probleme beim Bau von universellen Shift-Registern schon gelöst haben und uns entsprechende "Black Boxes" zur Verfügung stellen. Diese haben üblicherweise zusätzlich zum schon gewohnten Takteingang "T" noch zwei weitere Steuereingänge:
Das Schaltsymbol für ein solches universelles Shift-Register sieht dann so aus:
In der Implementierung des universellen Shift-Registers in unserem Applet wird das Register beim Betrieb noch mit einem Titel versehen, der Auskunft über den eingestellten Betriebsmodus gibt.



5.3 Eine Multiplizier-Schaltung


Jetzt haben wir tatsächlich alle Komponenten zur Verfügung gestellt, die wir zum Aufbau einer Multiplizier-Schaltung benötigen. Dann also an die Arbeit! Zunächst zeigen wir hier ein statisches Bild des gesamten Multiplizierers, das allerdings einiges an Erläuterungen braucht, bevor man sinnvoll mit der Schaltung arbeiten kann:

Was müssen wir nun tun, um mit einer solchen Schaltung wirklich zwei Dualzahlen miteinander zu multiplizieren? Nun, zunächst müssen wir die gewünschten Faktoren oben in den beiden 4-Bit-Quellen einstellen - mit dem niederwertigsten Bit am rechten Rand! Und dann müssen wir mit zwei Klicks auf T1 diese beiden Faktoren in die Arbeits-Register laden. Sodann schalten wir die beiden Arbeits-Register vom "Data"- in den "Shift"-Mode um. Nun enthalten die Ausgänge der 8 AND-Schaltungen das Produkt aller Bits des ersten Faktors mit dem niederwertigsten Bit des zweiten Faktors. Dies ist beim gewöhnlichen schriftlichen Multiplizieren normalerweise das letzte Zwischenprodukt -- hier ist es das erste! Die Zwischenprodukte der schriftlichen Multiplikation fallen hier also in umgekehrter Reihenfolge an, was die Handhabung der Schaltung vereinfacht. Zwei Klicks auf T2 übernehmen das erste Zwischenprodukt in das Ergebnis-Register.

Zwei weitere Klicks auf T1 schieben den ersten Faktor um eine Binärstelle nach links, was seinen Wert verdoppelt, und den zweiten Faktor um eine Binärstelle nach rechts, womit dann am MSB-Ausgang des zweiten Arbeits-Registers die Ziffer der ursprünglichen 21-Stelle(!) des zweiten Faktors anliegt. An den Ausgängen der 8 AND-Schaltungen liegt nun also das nächst-höherwertige Zwischenprodukt an, und zwei weitere Klicks auf T2 addieren diesen Wert zum bisher aufgelaufenen Ergebnis.

Wiederholt man die Anweisungen des vorigen Abschnitts nun noch genau 2 Mal, dann erscheint am Ausgang der Schaltung in den 8 Bit-Anzeigen das Gesamtergebnis der Multiplikation.

Ein kleines technisches Problem ist noch zu lösen: Wie setzt man die Schaltung wieder zurück in einen ordentlichen Anfangszustand? Bei den Bit-Quellen ist das nicht schwer, aber wie löscht man die Register? Hier sollte Ihnen der Hinweis genügen, dass sich alle (drei) Register in einen Shift-Mode schalten lassen, in dem man dann durch einige Takt-Klicks alle "1"-Werte aus dem Register herausdrängen kann.

Und jetzt sind Sie an der Reihe:
Beispiel-Rechnung:

1101 * 1011    
       1101 * 1
      11010 * 1
     110100 * 0
    1101000 * 1
   10001111    


Aufgabe:

  1. Binäre Multiplikation im Test

    1. Führen Sie den oben beschriebenen Multiplizier-Algorithmus in dieser Simulation durch, und zwar an der rechts gegebenen Beispielaufgabe der (dezimalen) Multiplikation 13*11!

    2. Setzen Sie die Simulation in den Anfangszustand zurück! Rechnen Sie dann einige eigene Beispiele, und überzeugen Sie sich von der korrekten Arbeitsweise der Simulation.

    3. Interpretieren Sie im obigen Beispiel die Faktoren als Zweierkomplemente! Welche Rechnung würde dann da durchgeführt? Stimmt das Ergebnis mit Ihren Erwartungen überein?

    4. Fritzchen Pfiffig ist sowieso nicht zufrieden mit der obigen Schaltung. Er schwadroniert was daher von "Verschwendung" und behauptet, er könne "massenweise" Bauteile einsparen. Können Sie das nachvollziehen?
    Lösungsvorschlag





5.4 Wohin geht die Reise?


Es ist Zeit, Bilanz zu machen. Wir konnten die Frage "Wie rechnen Rechner?" für die Addition und Subtraktion ganzer Zahlen (fast) vollständig beantworten, wie unsere "universelle Addier- und Subtrahier-Maschine" zeigt. Das ist durchaus erfreulich, wird doch damit ein stabiles und belastbares Fundament für die höheren Rechenarten gelegt.

Bei der Multiplikation mussten wir uns aber auf die nicht-negativen Faktoren beschränken, sonst fliegt unsere "Multiplizier-Maschine" aus der Kurve. In der Tat beschränken sich viele professionelle Multiplizierer auf das Rechnen mit Beträgen und ermitteln das Vorzeichen des Produkts in einer gesonderten Berechnung. Das fehlt in unserem Entwurf noch.

Ebenfalls unbefriedigend ist die kleine Stellenzahl unserer Faktoren: mit 4-Bit-Zahlen kommt man nicht weit. Grundsätzlich ist aber zu beachten, dass das Produkt zweier nicht-negativer n-Bit-Zahlen bis zu 2n Binärstellen haben kann! Und solange wir für das Produkt nur 8 Bit zur Verfügung stellen wollen, ist es klug, sich bei den Faktoren auf 4 Bit zu beschränken. Wer hingegen zwei 8-Bit-Zahlen miteinander multiplizieren will, der muss für das Produkt 16 Bit bereitstellen, wozu er dann auch die passenden 16-Bit-Shift-Register und einen 16-Bit-Addierer braucht. Zwar sind das alles keine grundsätzlich neuen Probleme, aber der Aufwand steigt linear mit der gewünschten Stellenzahl an.

Trotzdem bleiben die Multiplizierer ein Sorgenkind der CPU-Entwickler, und den Grund dafür zeigt schon unsere obige Simulation: während unsere universelle Additions- und Subtraktions-Maschine beim Einladen der Summanden auch gleich das Ergebnis produziert, braucht unsere Multiplizier-Maschine dazu noch einiges an Unterstützung: wir müssen den Ablauf der Multiplikation noch mit unseren wohlüberlegten Mausklicks genau steuern! Was hier noch wesentlich fehlt, ist ein Schaltung, die die Steuerung des Berechnungs-Algorithmus übernimmt. Es ist kein Hexenwerk, eine solche Steuerlogik zu implementieren, die dann über ein(!) Eingangssignal angestoßen wird und den ganzen komplizierten Vorgang sicher steuert, aber das braucht Zeit! Da geht's dem Computer wie dem Menschen: Addieren geht schnell, aber Multiplizieren ist wirklich Arbeit. So brauchen auch moderne CPUs für eine Multiplikation etwa 50 Mal so lang wie für eine Addition.

Natürlich haben sich schon viele Techniker um dieses Multiplikations-Problem gekümmert, und es gibt eine Vielzahl anderer Methoden der Multiplikation von Binärzahlen. Inzwischen gibt es sogar "Multiplikations-Netze", die das Produkt (beinahe) so schnell liefern wie unsere Addier-Maschine die Summe. Allerdings steigt bei diesen Schaltungen der Hardware-Aufwand mit dem Quadrat(!) der Stellenzahl n an, was sie dann für den praktischen Einsatz doch wieder unattraktiv macht.

Was noch fehlt am vollständigen Spektrum der Grundrechenarten, ist die Division. Diese ist ähnlich schwierig zu implementieren wie die Multiplikation. Immerhin kann dabei ähnlich vorgehen wie bei der Multiplikation: man nimmt einfach den Algorithmus der schriftlichen Division als Vorlage. Aber das verschieben wir auf die nächste Informatik-Klausur ;-)

Höhere Rechenarten wie z.B. das Potenzieren werden in der Regel nicht mehr "in Hardware gegossen", sondern lieber in Software implementiert. Unter den mathematischen Funktionen sind diejenigen harmlos, die sich auf die Grundrechenarten zurückführen lassen, wie z.B. Polynome. Problematisch hingegen sind die transzendenten Funktionen wie die trigonometrischen Funktionen (Sinus, Cosinus, Tangens) und die Exponential-Funktion sowie deren Umkehrfunktionen. Diese Funktionen kann man mit hinreichender Genauigkeit mit Hilfe ihrer Potenzreihen-Entwicklung errechnen.






Zum vorigen Kapitel Zum Inhaltsverzeichnis Zum nächsten Kapitel