Rechnerarithmetik

Lerne, wie Prozessorhardware rechnet. Addiere und subtrahiere mit einem einzigen Addierer für das Zweierkomplement, unterscheide Übertrag und Überlauf und baue eine ALU, die auch Zahlen vergleicht und logische Operationen ausführt. Verfolge die Arbeitsweise von Multiplizierern und Dividierern, von Schiebe-Addier-Schaltungen bis zum Booth-Algorithmus und schnellen Baummultiplizierern, einschließlich der RISC-V-Befehle. Kodiere anschließend Zahlen als Gleitkommazahlen nach IEEE 754, addiere, multipliziere und runde sie wie die Hardware und erkläre, warum Ergebnisse wie 0,1 + 0,2 nicht exakt sind.

MittelEinheit 3 von 6 in Kurs: Rechnerarchitektur – Prozessoren, Speicher und RISC-V

Was du lernst

  1. Verwende einen einzigen binären Addierer für vorzeichenbehaftete und vorzeichenlose Addition und Subtraktion und entscheide, wann ein Ergebnis nicht mehr in die verfügbaren Bits passt.
    • Addiere und subtrahiere binär dargestellte ganze Zahlen mit einem Addierer
      Addiere n-Bit-Zahlen spaltenweise, subtrahiere durch Addition des Zweierkomplements und erkenne, warum dieselbe Schaltung für vorzeichenbehaftete und vorzeichenlose Werte geeignet ist.
    • Erkenne Überläufe bei vorzeichenbehafteten und vorzeichenlosen Ergebnissen
      Unterscheide Übertrag und Überlauf, erkenne beide mit einfacher Hardware oder einer kurzen Befehlsfolge und erfahre, wie Prozessoren und Programmiersprachen darauf reagieren.
  2. Baue eine ALU aus 1-Bit-Slices, die addiert, subtrahiert, vergleicht und logische Operationen ausführt, und beschleunige ihre Übertragskette.
    • Baue eine n-Bit-ALU aus 1-Bit-Slices auf
      Kombiniere Logikgatter, einen Volladdierer und Multiplexer zu einer 1-Bit-ALU, verknüpfe die Slices zu einer n-Bit-ALU und wähle Operationen über Steuerleitungen aus.
    • Vergleiche Zahlen und erkenne Nullergebnisse in der ALU
      Erzeuge den Zero-Ausgang für Gleichheitssprünge und das Kleiner-als-Ergebnis für vorzeichenbehaftete und vorzeichenlose Vergleiche, einschließlich der Überlaufkorrektur.
    • Beschleunige die Addition durch Übertragsvorausberechnung
      Erkläre, warum Überträge Ripple-Carry-Addierer verlangsamen, und berechne Überträge mithilfe von Übertragserzeugungs- und Übertragsweiterleitungssignalen im Voraus.
  3. Multipliziere und dividiere wie die Hardware, von einfachen Schiebe-Addier-Schaltungen über Vorzeichenregeln bis zu schnellen Multiplizierern und den RISC-V-Befehlen.
    • Multipliziere durch Verschieben und Addieren
      Multipliziere vorzeichenlose Binärzahlen mit dem sequenziellen Schiebe-Addier-Algorithmus, wähle die richtige Breite für das Produkt und nutze Verschiebungen für Zweierpotenzen.
    • Multipliziere vorzeichenbehaftete Zahlen und nutze schnelle Multiplikationsverfahren
      Verarbeite Operanden im Zweierkomplement, rekodiere Multiplikatoren mit dem Booth-Algorithmus und erkläre, wie Baummultiplizierer hohe Geschwindigkeit erreichen.
    • Dividiere ganze Zahlen und behandle die Sonderfälle
      Dividiere mit dem restaurierenden Algorithmus, wende die Vorzeichenregeln für Quotient und Rest an und erfahre, wie Hardware und RISC-V Division durch null und Überlauf behandeln.
  4. Kodiere und dekodiere Binärwerte nach IEEE 754, erkläre den Wertebereich und die Genauigkeit jedes Formats und erkenne Nullwerte, Unendlichkeitswerte, NaNs und subnormale Zahlen.
    • Kodiere und dekodiere Binärformate nach IEEE 754
      Schreibe eine Zahl in normalisierter wissenschaftlicher Binärschreibweise, speichere sie in den Feldern für Vorzeichen, Exponent mit Bias und Mantisse und lies gespeicherte Bits wieder als Wert.
    • Verwende Nullwerte, Unendlichkeitswerte, NaNs und subnormale Zahlen
      Erkenne die reservierten Exponentenmuster, erkläre den graduellen Unterlauf und sage Ergebnisse und Flags bei Ausnahmeoperationen voraus.
  5. Verfolge die Hardwareschritte bei Addition und Multiplikation von Gleitkommazahlen, runde Ergebnisse korrekt und sage die daraus folgenden Genauigkeitsfehler voraus.
    • Addiere und multipliziere Gleitkommazahlen
      Gleiche Exponenten an, rechne, normalisiere und runde in der Reihenfolge der Gleitkommahardware und verwende die RISC-V-Gleitkommabefehle.
    • Runde Ergebnisse korrekt
      Wende die Rundungsrichtungen von IEEE 754 an, runde zur nächsten Zahl mit gerader Endziffer bei Gleichstand und nutze Schutz-, Rundungs- und Sticky-Bits, um wie mit unendlicher Genauigkeit zu runden.
    • Erkenne drohende Genauigkeitsfehler und vermeide sie
      Erkläre, warum vertraute Dezimalwerte binär ungenau sind, warum die Gleitkommaaddition nicht assoziativ ist und wie Absorption, Auslöschung und Umwandlungen tatsächliche Fehler verursachen.

Rechnerarithmetik einfach erklärt

5 Kapitel

1

Addiere und subtrahiere ganze Zahlen und erkenne Überläufe

Ein Addierer erzeugt Bits, bevor entschieden wird, ob diese Bits vorzeichenbehaftete oder vorzeichenlose Zahlen darstellen. Verfolge die Überträge bei der Addition, verwende dieselbe Schaltung für die Subtraktion und prüfe das Ergebnis anschließend anhand des passenden Wertebereichs. Die Unterscheidung ist auch in Software wichtig: Ein Prozessor kann Statusflags führen, die niederwertigen Bits zurückgeben oder eine Ausnahme auslösen, während eine Programmiersprache diesen Maschinenoperationen eigene Regeln zuweist.

1.1 Addiere und subtrahiere binär dargestellte ganze Zahlen mit einem Addierer

Ein binärer Addierer führt an jeder Bitposition dieselbe kleine Aufgabe aus. Er kombiniert die beiden Operandenbits mit einem Übertrag von der Position rechts daneben. Die Bedeutung des fertigen Bitmusters ergibt sich erst danach.

Verfolge den Übertrag

Ein Halbaddierer hat zwei Eingänge: Seine Summe ist deren XOR und sein Übertrag deren UND. Ein Volladdierer nimmt außerdem einen Eingangsübertrag entgegen:

si=ai⊕bi⊕ci ci+1=aibi+aici+bici

Hier bedeutet Multiplikation UND und Addition ODER. Die Summe ist 1 bei einer ungeraden Anzahl von Eingängen mit dem Wert 1; der Übertrag ist 1 bei mindestens zwei. Die Verkettung von Volladdierern ergibt einen Ripple-Carry-Addierer. Nur Bit 0 erhält den anfänglichen Übertrag; jedes spätere Bit erhält den Übertrag, den sein Nachbar erzeugt.

Schreibe für 23 + 45 0001 0111 + 0010 1101. Bei Bit 0 ergibt 1 + 1 die Summe 0 und den Übertrag 1. Bei Bit 1 ergibt 1 + 0 + 1 erneut 0 und den Übertrag 1. Bei Bit 2 ergeben drei Eingänge mit dem Wert 1 die Summe 1 und den Übertrag 1. Weiter nach links ergibt sich 0100 0100, also 68, ohne abschließenden Übertrag.

Ein n-Bit-Ergebnis behält nur die niederwertigen n Bits, sodass die Schaltung die Summe modulo 2n berechnet. Bei 8 Bit ergibt 1111 1100 + 0000 0101 das Ergebnis 0000 0001 und den Ausgangsübertrag 1. Vorzeichenbehaftet gelesen ist das −4 + 5 = 1. Vorzeichenlos gelesen ist es 252 + 5 = 257, dessen niederwertige acht Bits 1 darstellen. Die Schaltung hat sich nicht geändert, wohl aber der zulässige Wertebereich.

Wandle Subtraktion in Addition um

Das Zweierkomplement liefert die Gleichung

a−b=a+b‾+1.

Eine Steuerleitung für die Subtraktion verknüpft jedes Bit des zweiten Operanden per XOR mit 1 und invertiert es dadurch; außerdem setzt sie den anfänglichen Eingangsübertrag auf 1. Für die Addition ist diese Leitung 0, sodass der zweite Operand unverändert durchgereicht wird und der anfängliche Übertrag 0 ist.

Um 23 − 45 zu berechnen, invertiere 0010 1101 zu 1101 0010. Addiere 0001 0111 + 1101 0010 + 1, um 1110 1010 mit Ausgangsübertrag 0 zu erhalten. Der vorzeichenbehaftete Wert ist −22. Bliebe der anfängliche Übertrag 0, ergäbe sich −23: Die Invertierung allein liefert eins weniger als den benötigten negativen Wert.

Bei vorzeichenloser Subtraktion bedeutet Ausgangsübertrag 1 keinen Borgübertrag; Ausgangsübertrag 0 bedeutet, dass ein Borgübertrag nötig war. Somit zeigt der Ausgangsübertrag 0 bei 23 − 45 ein vorzeichenloses Ergebnis unter null an. Arm hält diesen Übertrag für den Fall ohne Borgübertrag fest; x86 hält dessen Umkehrung als Borgübertragsflag fest.

Gleiche vor der Operation die Breiten an
InterpretationErweiterungsregelErweiterung von 4-Bit-1110 auf 8 Bit
Vorzeichenbehaftetes ZweierkomplementVorzeichenbit kopieren1111 1110, weiterhin −2
VorzeichenlosNullen einfügen0000 1110, weiterhin 14

RISC-V lb erweitert ein Byte mit dem Vorzeichen, lbu erweitert es mit Nullen, und addi erweitert seinen 12-Bit-Direktoperanden mit dem Vorzeichen. Wähle die Erweiterung anhand der Bedeutung des Operanden, bevor du die Bits an den Addierer weitergibst.

Der kleinste negative vorzeichenbehaftete Wert hat kein positives Gegenstück bei gleicher Breite. Die Negation des 8-Bit-Musters 1000 0000 invertiert es zu 0111 1111 und addiert 1, sodass wieder 1000 0000 entsteht. Das gewünschte +128 benötigt ein breiteres vorzeichenbehaftetes Format.

Wichtige Erkenntnisse

  • Ein Volladdierer kombiniert zwei Operandenbits und einen Eingangsübertrag.
  • Die gespeicherte n-Bit-Summe ist die mathematische Summe modulo 2n.
  • Die Subtraktion invertiert den zweiten Operanden und setzt nur den anfänglichen Eingangsübertrag auf 1.
  • In dieser Subtraktionsschaltung bedeutet Ausgangsübertrag 1, dass kein vorzeichenloser Borgübertrag nötig ist.
  • Vorzeichenerweiterung erhält vorzeichenbehaftete Werte; Nullerweiterung erhält vorzeichenlose Werte.

1.2 Erkenne Überläufe bei vorzeichenbehafteten und vorzeichenlosen Ergebnissen

Überlauf bedeutet, dass das exakte Ergebnis außerhalb des Wertebereichs des Zielformats liegt. Vorzeichenlose n-Bit-Werte reichen von 0 bis einschließlich 2n−1; vorzeichenbehaftete Werte im Zweierkomplement reichen von −2n−1 bis einschließlich 2n−1−1. Acht Bits speichern vorzeichenlos 0 bis 255 oder vorzeichenbehaftet −128 bis 127. Dasselbe gespeicherte Ergebnis kann in einer Lesart korrekt sein und in der anderen einen Überlauf darstellen.

Prüfe das richtige Signal
OperationVorzeichenloser ÜberlaufVorzeichenbehafteter Überlauf
AdditionDer Ausgangsübertrag des höchstwertigen Bits ist 1Eingaben mit gleichem Vorzeichen ergeben ein Ergebnis mit entgegengesetztem Vorzeichen
SubtraktionEin Borgübertrag ist nötigEingaben mit unterschiedlichen Vorzeichen ergeben ein Ergebnis, dessen Vorzeichen vom ersten Eingang abweicht

Für vorzeichenbehaftete Addition oder Subtraktion kann die Hardware verwenden:

V=cn−1⊕cn,

wobei die beiden Überträge in die Vorzeichenstelle hinein- und aus ihr herausführen. Der Ausgangsübertrag allein beantwortet die vorzeichenlose Frage.

Addiere 107 und 54 mit 8 Bit: 0110 1011 + 0011 0110 ergibt 1010 0001. Ein Übertrag gelangt in Bit 7, aber keiner verlässt es, also ist der Überlauf 1. Der vorzeichenlose Wert 161 ist darstellbar; der vorzeichenbehaftet gelesene Wert −95 entspricht nicht der tatsächlichen Summe 161. Umgekehrt ergibt −4 + 5 den Übertrag 1, aber den vorzeichenbehafteten Überlauf 0. Die Addition von 1000 0000 zu sich selbst ergibt Übertrag 1 und Überlauf 1, sodass beide Lesarten fehlschlagen.

Die Addition unterschiedlicher Vorzeichen kann nicht überlaufen: Die exakte Summe liegt zwischen den Operanden. Für die Subtraktion gilt eine eigene Vorzeichenregel, weil die Subtraktion einer negativen Zahl den ersten Operanden erhöht. Zum Beispiel ist 100 − (−40) für vorzeichenbehaftete 8 Bit zu groß, obwohl beide Eingabewerte darstellbar sind.

Kenne die Wirkung des Befehls

x86 add setzt Carry- und Overflow-Flag. Arm-Operationen, die Flags setzen, wie ADDS, setzen sie ebenfalls; ein gewöhnliches ADD erhält die vorhandenen Flags. MIPS add und addi lösen bei vorzeichenbehaftetem Überlauf einen Trap aus, addu und addiu dagegen nicht. Die RISC-V-Ganzzahladdition schreibt die niederwertigen Bits und hat weder Überlauf-Flags noch einen Trap für arithmetischen Überlauf.

Nach add t0, t1, t2 lautet eine vorzeichenlose RISC-V-Prüfung:

bltu t0, t1, overflow

Eine umgebrochene vorzeichenlose Summe ist kleiner als ein ursprünglicher Operand. Vorzeichenbehaftete Werte benötigen eine andere Prüfung:

slti t3, t2, 0
slt  t4, t0, t1
bne  t3, t4, overflow

Der erste Befehl hält fest, ob der zweite Operand negativ ist. Der zweite hält fest, ob das Ergebnis kleiner als der erste Operand ist. Ohne Überlauf stimmen diese Prüfungen überein: Die Addition eines negativen Werts verringert den Wert, während die Addition eines nicht negativen Werts ihn nicht verringern kann. Eine Abweichung zeigt einen Überlauf an. Bei einem bekanntermaßen positiven Direktoperanden genügt ein vorzeichenbehafteter bedingter Sprung, der prüft, ob die Summe kleiner geworden ist.

Unterscheide Hardware- und Sprachregeln

Die vorzeichenlose Arithmetik von C und C++ bricht modulo 2n um; vorzeichenbehafteter Überlauf ist undefiniertes Verhalten. Java int und long brechen um, während Math.addExact einen Überlauf durch eine Ausnahme meldet. Ganzzahlen in Python wachsen bei Bedarf. Ein Umbruch in der Hardware legt daher nicht fest, was ein C-Programm tun darf.

Umbrechende Additionen und Subtraktionen erhalten ein darstellbares Endergebnis: In der modularen 8-Bit-Arithmetik bricht (100 + 50) − 60 zuerst zu −106 und dann zu 90 um. Diese Überlegung gilt für umbrechende Arithmetik, nicht für vorzeichenbehaftete C-Ausdrücke, die überlaufen.

Sättigung ist eine andere Strategie. Vorzeichenlos mit 8 Bit sättigt 200 + 100 auf 255, statt zu 44 umzubrechen. Das ist für Pixelintensitäten und andere beschränkte Signale nützlich, bei denen der Umbruch eines großen positiven Ergebnisses zu einem kleinen Wert irreführend wäre.

Wichtige Erkenntnisse

  • Wähle Überlaufprüfungen passend zur Interpretation der Operanden und zur Operation.
  • Der vorzeichenbehaftete Überlauf ist das XOR der Überträge in das Vorzeichenbit hinein und aus ihm heraus.
  • RISC-V-Software muss bei Bedarf auf Ganzzahlüberlauf prüfen, um ihn zu melden.
  • Vorzeichenbehafteter Überlauf in C, Umbruch in Java und wachsende Ganzzahlen in Python haben unterschiedliche Semantik.
  • Modulare Addition und Subtraktion können nach einem zwischenzeitlichen Umbruch einen darstellbaren Endwert ergeben.
  • Sättigung begrenzt ein Ergebnis außerhalb des Wertebereichs auf einen Endpunkt.
2

Entwirf eine arithmetisch-logische Einheit

Eine ALU vereint eine Auswahl von Operationen in einer gemeinsamen Schaltung. Gatter und ein Addierer berechnen mögliche Ergebnisse, Steuerleitungen wählen eines aus, und einige zusätzliche Ausgänge unterstützen Gleichheits- und Ordnungsvergleiche. Baue diese Struktur aus Bitslices auf, erkenne, warum der vorzeichenbehaftete Vergleich eine Überlaufkorrektur benötigt, und verkürze anschließend den Übertragspfad, damit ein breiterer Datenpfad sein arithmetisches Ergebnis liefern kann, ohne auf einen Übertrag durch alle Bits zu warten.

2.1 Baue eine n-Bit-ALU aus 1-Bit-Slices auf

Eine arithmetisch-logische Einheit, kurz ALU, nimmt Operanden und Steuereingaben entgegen und liefert ein Ergebnis sowie Statusausgänge. Sie ist kombinatorisch: Ihre Ausgänge hängen von den aktuellen Eingängen ab. Register halten Operanden und übernehmen Ergebnisse; die ALU selbst speichert nichts.

Baue ein Bit und wiederhole es

Ein 1-Bit-Slice berechnet UND, ODER und eine Volladdierersumme parallel. Ein Multiplexer wählt aus, welches mögliche Ergebnis das Ergebnisbit erreicht. In einer n-Bit-ALU teilen sich alle Slices die Operationssteuerung, während der Ausgangsübertrag jedes Addierers zum Eingangsübertrag des nächsten Slice führt. Logische Operationen arbeiten an jeder Position unabhängig; die Addition hängt von der Übertragskette ab.

Eine Bnegate-Steuerung invertiert den zweiten Operanden und setzt zugleich den Eingangsübertrag von Bit 0. Wird dann der Addierer gewählt, berechnet er eine Subtraktion. Höherwertige Slices erhalten ihren Übertrag vom vorhergehenden Slice, nicht direkt von Bnegate. Würden alle Übertragseingänge auf einen hohen Pegel gesetzt, würden zusätzliche Einsen in die Rechnung eingefügt.

Eine Ainvert-Steuerung kann außerdem den ersten Operanden invertieren. Wird UND bei beiden invertierten Operanden gewählt, entsteht nach dem de morganschen Gesetz NOR:

a‾⋅b‾=a+b‾.

Wird ODER bei beiden invertierten Operanden gewählt, entsteht NAND. In diesen logischen Gleichungen bezeichnet das Pluszeichen ODER.

Lies ein Steuerwort

Eine klassische Lehrbuch-ALU verwendet die Felder Ainvert, Bnegate und ein Operation-Auswahlfeld mit zwei Bits:

SteuerwortGewähltes Ergebnis
0000UND
0001ODER
0010Addition
0110Subtraktion
0111Vorzeichenbehafteter Kleiner-als-Vergleich
1100NOR

Dies sind die Kodierungen dieses konkreten Entwurfs. Es sind interne Steuersignale, keine RISC-V-Befehlskodierungen.

Für die Eingaben 0101 und 0011 invertiert das Steuerwort 0110 die zweite Eingabe zu 1100 und liefert den anfänglichen Übertrag 1. Der Addierer erzeugt 0010 mit Ausgangsübertrag 1: 5 − 3 = 2, ohne vorzeichenlosen Borgübertrag. Die Wahl von UND für die ursprünglichen Eingaben würde stattdessen 0001 ergeben. Die Eingabewerte können gleich bleiben, während eine Änderung der Steuerung einen anderen Ergebnispfad auswählt.

Der höchstwertige Slice liefert außerdem Informationen über Überlauf und Vergleich. Eine Reduktion aller Ergebnisbits liefert Zero. Diese Statusausgänge ermöglichen dem umgebenden Prozessorsteuerwerk, das arithmetische Ergebnis zu prüfen, ohne ein zweites Ergebnis in voller Breite zu speichern.

Ergänze Verschiebungen neben dem Addierer

Eine vollständige ALU für den RISC-V-Basisbefehlssatz für Ganzzahlen benötigt außerdem XOR, vorzeichenlosen Vergleich und Verschiebungen. Ein Barrel-Shifter verwendet eine Folge von Multiplexerstufen. Jede Stufe reicht ihre Eingabe entweder unverändert durch oder verschiebt sie um eine Zweierpotenz. Ein 32-Bit-Schieber hat Stufen für 1, 2, 4, 8 und 16 Stellen und bewältigt damit in fünf Stufen jede Verschiebung von 0 bis 31.

Um um 13 zu verschieben, wähle die Stufen für 8, 4 und 1. Die gewählten Verschiebungen ergeben zusammen ein Ergebnis. Eine logische Rechtsverschiebung fügt Nullen ein. Eine arithmetische Rechtsverschiebung kopiert das Vorzeichenbit und erhält so das Vorzeichen eines negativen Werts. Daher ergibt 1111 0000 um zwei Stellen nach rechts verschoben logisch 0011 1100 und arithmetisch 1111 1100.

Wichtige Erkenntnisse

  • Eine ALU berechnet Ergebnisse aus aktuellen Eingaben; Register stellen Speicher bereit.
  • Bitslices teilen sich die Operationssteuerung und geben Überträge zwischen benachbarten Positionen weiter.
  • Bnegate invertiert den zweiten Operanden und liefert den anfänglichen Übertrag für die Subtraktion.
  • Ein Multiplexer wählt zwischen arithmetischen und logischen Ergebnissen.
  • Die Stufen eines Barrel-Shifters kombinieren Verschiebungen um Zweierpotenzen.

2.2 Vergleiche Zahlen und erkenne Nullergebnisse in der ALU

Vergleiche verwenden häufig die Subtraktion. Bei der Gleichheit wird gefragt, ob die Differenz null ist. Bei der Ordnung wird gefragt, ob die mathematische Differenz negativ ist; das erfordert besondere Sorgfalt, wenn eine Subtraktion mit fester Breite überläuft.

Erkenne Gleichheit über alle Bits

Der Zero-Ausgang ist die NOR-Verknüpfung aller Ergebnisbits:

Zero=r0+r1+⋯+rn−1‾.

Ein Ergebnisbit ungleich null macht Zero falsch. Die Subtraktion zweier gleicher Bitmuster ergibt null; zwei verschiedene n-Bit-Muster können sich nicht um ein Vielfaches von 2n ungleich null unterscheiden, sodass eine umbrechende Subtraktion keine falsche Gleichheit erzeugt. Eine alternative Gleichheitsschaltung verknüpft entsprechende Operandenbits per XOR und prüft, ob jedes XOR-Ergebnis null ist.

Korrigiere das Vorzeichen für den vorzeichenbehafteten Kleiner-als-Vergleich

RISC-V slt schreibt die ganze Zahl 1 in voller Breite, wenn der erste vorzeichenbehaftete Operand kleiner ist, andernfalls 0. In einer ALU aus Slices berechnet der höchstwertige Slice ein Set-Signal und sendet es an den Less-Eingang von Bit 0 zurück. Alle höherwertigen Ergebnisbits werden auf null gesetzt.

Das korrekte Set-Signal ist

Lesssigned=Vorzeichen(a−b)⊕V.

Ohne Überlauf funktioniert das Vorzeichen der Differenz unmittelbar. Bei einem Überlauf ist dieses Vorzeichen gegenüber der tatsächlichen Differenz umgekehrt, sodass XOR mit 1 es korrigiert.

Vergleiche 7 mit −8 in vier Bit. Die Subtraktion 0111 + 0111 + 1 ergibt 1111. Ihr Vorzeichen deutet auf eine negative Differenz hin, aber die exakte Differenz ist 15 und liegt außerhalb des Bereichs von −8 bis 7. Der Überlauf ist 1, also ist das korrigierte Less-Signal 1 XOR 1 = 0. Das slt-Ergebnis ist 0000 und meldet korrekt, dass 7 nicht kleiner als −8 ist.

Nutze den Borgübertrag für den vorzeichenlosen Kleiner-als-Vergleich

Der vorzeichenlose Vergleich nutzt ein anderes Signal:

Lessunsigned=cn‾

für eine Subtraktion mit invertiertem zweitem Eingang und anfänglichem Übertrag 1. Ausgangsübertrag 0 bedeutet, dass ein Borgübertrag nötig war, also ist der erste vorzeichenlose Operand kleiner.

EingabemusterVorzeichenbehafteter VergleichVorzeichenloser Vergleich
0111, 10007 < −8 ist falsch7 < 8 ist wahr
1000, 0111−8 < 7 ist wahr8 < 7 ist falsch

Diese Unterscheidung zeigt sich bei slt gegenüber sltu und bei den bedingten Sprüngen blt gegenüber bltu und bge gegenüber bgeu. Weder das Vorzeichen des Ergebnisses allein noch ein allgemeines „Negativ-Flag“ beantwortet beide Fragen.

Wende den Vergleich in Software an

Eine vorzeichenlose Bereichsprüfung kann negative Indizes ebenso zurückweisen wie Indizes ab der Arraylänge:

bgeu x10, x11, IndexOutOfBounds

Hier enthält x10 den vorzeichenbehafteten Index und x11 eine nicht negative Länge, die in den vorzeichenbehafteten Wertebereich passt. Ein negativer Index, vorzeichenlos neu interpretiert, ist mindestens 2n−1 und überschreitet daher jede solche Länge. Die Bedingung für die Länge ist entscheidend: Sie macht einen einzigen vorzeichenlosen Vergleich ausreichend.

Auch Sprachumwandlungen können die Bedeutung eines Vergleichs ändern. Bei einem 32-Bit-C-unsigned int ist -1 < 0u falsch, weil −1 vor dem Vergleich in 4.294.967.295 umgewandelt wird. Verfolge die Umwandlung, bevor du vom geschriebenen Minuszeichen ausgehst.

Wichtige Erkenntnisse

  • Zero prüft jedes Ergebnisbit, sodass eine Subtraktion Gleichheit feststellen kann.
  • Der vorzeichenbehaftete Kleiner-als-Vergleich nutzt das Vorzeichen der Differenz XOR den vorzeichenbehafteten Überlauf.
  • Der vorzeichenlose Kleiner-als-Vergleich nutzt den Borgübertrag der Subtraktion.
  • Der Kleiner-als-Vergleich schreibt 0 oder 1 über die volle Ergebnisbreite.
  • Eine vorzeichenlose Bereichsprüfung erfasst negative Indizes, wenn die Länge in den nicht negativen vorzeichenbehafteten Wertebereich passt.
  • Umwandlungen können einen Vergleich von vorzeichenbehaftet zu vorzeichenlos ändern.

2.3 Beschleunige die Addition durch Übertragsvorausberechnung

Der Übertrag eines Ripple-Carry-Addierers muss der Reihe nach jedes Bit durchlaufen. Die Übertragsvorausberechnung ersetzt dieses sequenzielle Warten durch eine Schaltung, die Überträge aus den Operandenbits und dem anfänglichen Übertrag vorhersagt.

Beschreibe das Übertragsverhalten jedes Bits

Das Übertragserzeugungs- und das Übertragsweiterleitungssignal seien

gi=aibi,pi=ai+bi.

Dies sind boolesche Ausdrücke: Multiplikation ist UND und Addition ist ODER. Das Übertragserzeugungssignal ist 1, wenn das Bit unabhängig vom Eingangsübertrag einen Übertrag erzeugt. Das Übertragsweiterleitungssignal ist 1, wenn ein Eingangsübertrag weitergeleitet werden kann. Die Rekursionsgleichung lautet

ci+1=gi+pici.

Ein Bit, dessen beide Eingänge 1 sind, erzeugt einen Übertrag; ein Bit mit einem Eingang 1 leitet einen Übertrag weiter; ein Bit, dessen beide Eingänge 0 sind, stoppt ihn. Bei dieser ODER-Definition hat ein übertragserzeugendes Bit auch das Weiterleitungssignal 1, was die Übertragsformel nicht ändert.

Löse die Abhängigkeit auf

Setze für jeden vorherigen Übertrag den entsprechenden Ausdruck ein:

c1=g0+p0c0 c2=g1+p1g0+p1p0c0 c3=g2+p2g1+p2p1g0+p2p1p0c0 c4=g3+p3g2+p3p2g1+p3p2p1g0+p3p2p1p0c0.

Jeder Ausdruck hängt nun von Signalen ab, die aus den Operanden abgeleitet werden, und vom anfänglichen Übertrag, nicht von einer sequenziellen Kette von Zwischenüberträgen. Sobald die Überträge vorliegen, ist jedes Summenbit weiterhin das XOR seiner beiden Eingänge und des Eingangsübertrags.

Für 1011 + 0110 mit anfänglichem Übertrag 0 lautet das Übertragserzeugungssignal von Bit 0 aufwärts 0, 1, 0, 0 und das Weiterleitungssignal 1, 1, 1, 1. Die Eingangsüberträge der Bits 1 bis 4 sind also 0, 1, 1, 1. Die vier Ergebnisbits sind 0001 mit Ausgangsübertrag 1 und stellen 11 + 6 = 17 dar.

Baue Gruppen statt riesiger Gatter

Ein Vier-Bit-Block hat die Gruppensignale

G=g3+p3g2+p3p2g1+p3p2p1g0, P=p3p2p1p0.

Sein Ausgangsübertrag ist G+Pc0. Eine zweite Vorausberechnungsstufe kombiniert diese Blocksignale nach derselben Regel. Vier Vier-Bit-Blöcke und eine Einheit zur Gruppenvorausberechnung ergeben einen 16-Bit-Addierer. Weitere Gruppierungen ermöglichen breitere Entwürfe; Parallel-Präfix-Addierer wie Kogge-Stone ordnen diese Beziehungen zu einem schnellen Netzwerk an.

In einem einfachen Modell für Gatterlaufzeiten kostet Ripple Carry etwa zwei Gatterlaufzeiten pro Bit, also 32 für 16 Bit. Ein zweistufiger Entwurf mit Vorausberechnung kann den letzten Übertrag nach etwa fünf liefern: eine für Bitsignale, zwei für Gruppensignale und zwei für den Gruppenübertrag. Diese Schätzung zählt Logikstufen und setzt die nötigen Gatter voraus; die tatsächliche Verzögerung hängt auch von Gattergröße und Verdrahtung ab. Die Gruppierung tauscht mehr Hardware gegen einen Übertragspfad, dessen Länge ungefähr logarithmisch mit der Breite wächst.

Ein Carry-Select-Addierer setzt Fläche anders ein: Er berechnet einen oberen Block zweimal, einmal für Eingangsübertrag 0 und einmal für Eingangsübertrag 1. Ein Multiplexer wählt das richtige Ergebnis, sobald der Übertrag des unteren Blocks eintrifft.

Manche Addierer definieren das Weiterleitungssignal mit XOR statt mit ODER. Auch das ergibt korrekte Überträge und macht die Summe zu si=pi⊕ci. Verwende die gewählte Definition durchgehend, wenn du die Gruppenlogik herleitest.

Wichtige Erkenntnisse

  • Das Übertragserzeugungssignal zeigt einen erzeugten Übertrag an; das Übertragsweiterleitungssignal einen weitergeleiteten Eingangsübertrag.
  • Das Auflösen der Übertragsgleichungen beseitigt die sequenzielle Abhängigkeit von jedem vorherigen Ausgangsübertrag.
  • Gruppenübertragserzeugungs- und Gruppenübertragsweiterleitungssignale ermöglichen breiten Addierern mehrere Vorausberechnungsstufen.
  • Übertragsvorausberechnung und Carry-Select tauschen Schaltungsfläche gegen Geschwindigkeit, ohne die Summe zu ändern.
3

Multipliziere und dividiere ganze Zahlen in Hardware

Die Multiplikation kombiniert verschobene Teilprodukte; die Division bestimmt eine Quotientenziffer aus einem sich ändernden Rest. Verfolge beide Vorgänge in kleinen Registern und sieh dann, wie vorzeichenbehaftete Operanden die Verwaltung verändern. Schnellere Multiplizierer bilden und reduzieren viele Teilprodukte gemeinsam, während Dividierer Abhängigkeiten zwischen den Schritten behandeln müssen. RISC-V-Befehle stellen Produkthälften, Quotienten und Reste mit genauen Regeln für besondere Eingaben bereit.

3.1 Multipliziere durch Verschieben und Addieren

Jedes Bit des binären Multiplikators wählt eine verschobene Kopie des Multiplikanden oder null. Die Addition dieser Teilprodukte ergibt das Ergebnis. Ein n-Bit-Operand mal ein m-Bit-Operand kann n + m Bits benötigen, daher brauchen zwei 32-Bit-Operanden ein vollständiges Produkt mit 64 Bit.

Verfolge das Verschieben und Addieren

Initialisiere für vorzeichenlose n-Bit-Operanden ein 2n-Bit-Produkt mit null. Wiederhole n-mal: Prüfe das niederwertigste Bit des Multiplikators, addiere den aktuellen Multiplikanden, wenn dieses Bit 1 ist, verschiebe den Multiplikanden nach links und den Multiplikator nach rechts. Das Multiplikandenregister muss breit genug sein, um die verschobenen Kopien aufzunehmen.

Für 6 × 5 mit vier Bit ist der Multiplikator 0101:

SchrittNiederwertigstes MultiplikatorbitVerschobener MultiplikandZwischenprodukt
110000 01100000 0110
200000 11000000 0110
310001 10000001 1110
400011 00000001 1110

Das Endprodukt ist 30. Das geprüfte Bit und die Verschieberichtung wirken zusammen: Würde beim Rechtsverschieben des Multiplikators das höchstwertige Bit geprüft, würden Bits mit den falschen Stellenwerten gepaart. Dieser sequenzielle Entwurf benötigt n Schritte, einschließlich der Schritte, deren Multiplikatorbit null ist.

Teile den Registerplatz

Der erste Entwurf nutzt ein 2n-Bit-Multiplikandenregister und einen ebenso breiten Addierer. Ein verbesserter Entwurf hält den Multiplikanden unverändert in n Bits, legt den Multiplikator in die niederwertige Hälfte eines 2n-Bit-Produktregisters und initialisiert die höherwertige Hälfte mit null.

Ist das niederwertigste Bit 1, addiere den Multiplikanden zur höherwertigen Hälfte. Halte den Ausgangsübertrag des Addierers in einem zusätzlichen Bit und verschiebe dann diesen Übertrag und beide Produkthälften gemeinsam nach rechts. Die Multiplikatorbits verlassen das Register rechts, während Produktbits den frei werdenden Platz einnehmen. Geht der Übertrag verloren, werden große Produkte falsch: Bei Vier-Bit-Operanden würde 15 × 15 fälschlich 1 statt 225 ergeben. Bei einem Schritt pro Takt benötigt die einfache 32-Bit-Implementierung etwa 32 Zyklen.

Behalte die Produktbreite im Blick

Ein vorzeichenloses Produkt passt genau dann in n Bits, wenn die oberen n Bits seines vollständigen Produkts null sind. Für 6 × 5 ist das vollständige Ergebnis 0001 1110; wird nur 1110 gespeichert, ergibt das 14. Die Multiplikation selbst war korrekt, aber das schmale Ziel hat einen Teil davon verworfen.

Eine Linksverschiebung um k multipliziert mit 2k, wenn das Ergebnis darstellbar ist. Die Multiplikation mit 8 wird zu einer Verschiebung um drei Stellen; für die Multiplikation mit 10 können zwei verschobene Kopien verwendet werden:

(x << 3) + (x << 1)

Die Rechnung lautet 8x+2x=10x. Für die Verschiebungen und die Addition gelten weiterhin die Regeln für die Breite und die Programmiersprache; diese Umformung erzeugt keine zusätzlichen Ergebnisbits.

Lies die RISC-V-Produkthälften

mul liefert die niederwertigen XLEN Bits, wobei XLEN die Breite der Ganzzahlregister ist. mulhu liefert die höherwertige Hälfte für vorzeichenlose Operanden. Die Befehle für die höherwertige Hälfte bei vorzeichenbehafteten Operanden sind mulh für zwei vorzeichenbehaftete Operanden und mulhsu für einen vorzeichenbehafteten ersten und einen vorzeichenlosen zweiten Operanden.

Software, die das vollständige Produkt benötigt, kann den passenden Befehl für die höherwertige Hälfte und danach mul mit denselben Operanden ausführen. Eine Implementierung kann das Befehlspaar zusammenfassen. Das niederwertige Ergebnis allein zeigt nicht, ob ein vorzeichenloses Produkt hineinpasst; die höherwertige Hälfte liefert diesen Nachweis.

Wichtige Erkenntnisse

  • Jedes Multiplikatorbit wählt ein verschobenes Teilprodukt oder null.
  • Das vollständige Produkt kann die Summe der Operandenbreiten benötigen.
  • Das sequenzielle Verschieben und Addieren benötigt einen Schritt pro Multiplikatorbit.
  • Der kompakte Multiplizierer muss den Übertrag der Addition vor dem Verschieben erhalten.
  • Ein vorzeichenloses Produkt passt genau dann in das schmale Zielformat, wenn seine höherwertige Hälfte null ist.
  • RISC-V bietet einen Multiplikationsbefehl für die niederwertige Hälfte und drei interpretationsabhängige Befehle für die höherwertige Hälfte.

3.2 Multipliziere vorzeichenbehaftete Zahlen und nutze schnelle Multiplikationsverfahren

Die vorzeichenbehaftete Multiplikation muss die Vorzeichen der Operanden behandeln, ohne den kleinsten negativen Wert zu verlieren. Schnellere Hardware braucht außerdem eine Möglichkeit, viele Teilprodukte zu reduzieren, ohne jedes Mal auf eine vollständige Addition mit Übertragsweiterleitung zu warten.

Multipliziere Beträge sicher

Ein Ansatz hält die Vorzeichen fest, bildet vorzeichenlose n-Bit-Beträge, multipliziert sie zu einem 2n-Bit-Produkt und negiert das vollständige Produkt, wenn genau ein Operand negativ war. Für −8 mit vier Bit stellen die Betragsbits 1000 vorzeichenlos 8 dar. Sie können nicht als positiver vorzeichenbehafteter Vier-Bit-Wert gelesen werden.

Die niederwertigen n Produktbits sind bei vorzeichenbehafteter und vorzeichenloser Interpretation identisch. 1111 × 0010 ergibt vorzeichenlos 30 (0001 1110) oder vorzeichenbehaftet −2 (1111 1110). Beide niederwertigen Hälften sind 1110; nur die höherwertigen Hälften unterscheiden sich. Deshalb dient ein mul-Befehl beiden Interpretationen.

Verfolge die Entscheidungen des Booth-Algorithmus

Der Booth-Algorithmus arbeitet direkt mit dem Zweierkomplement. Gib dem Akkumulator n + 1 Bits und erweitere den Multiplikanden auf diese Breite mit dem Vorzeichen, sodass sowohl er als auch sein negativer Wert hineinpassen. Initialisiere den Akkumulator mit null, lege den Multiplikator in sein n-Bit-Register und hänge ein zusätzliches, mit null initialisiertes Bit an.

Betrachte das niederwertigste Bit des Multiplikators und das angehängte Bit als Paar:

PaarAkkumulatoroperation
10Multiplikanden subtrahieren
01Multiplikanden addieren
00 oder 11Unverändert lassen

Verschiebe nach jeder Entscheidung das gesamte Register aus Akkumulator, Multiplikator und Zusatzbit arithmetisch nach rechts. Wiederhole dies n-mal; verwirf das angehängte Bit und das redundante oberste Vorzeichenbit des Akkumulators, um das 2n-Bit-Produkt zu erhalten.

Verwende für 2 × (−3) den Multiplikanden 00010, den Multiplikator 1101 und den Akkumulator 00000. Die Paare sind 10, 01, 10, 11. Nach den jeweiligen Operationen und Verschiebungen lauten Akkumulator und Multiplikator 11111 0110, 00000 1011, 11111 0101 und 11111 1010. Die niederwertigen acht Produktbits 1111 1010 stellen −6 dar.

Eine logische Verschiebung würde oben null einfügen und negative Teilergebnisse verfälschen. Auch das zusätzliche Akkumulatorbit ist wichtig: Die Subtraktion eines kleinsten negativen n-Bit-Multiplikanden benötigt einen positiven Wert, der in n vorzeichenbehafteten Bits nicht verfügbar ist.

Verringere den Aufwand und die Übertragspfade

Die Booth-Rekodierung ersetzt eine Folge von Bits mit dem Wert 1 durch eine Subtraktion an ihrem niederwertigen Ende und eine Addition oberhalb ihres höchstwertigen Endes. Zum Beispiel ist 126 gleich 128 − 2. Wechselnde Bits sparen möglicherweise keinen Aufwand. Booth zur Basis 4 betrachtet zwei Multiplikatorbits pro Schritt und verwendet Ziffern von −2 bis +2, wodurch sich die Anzahl der Teilprodukte verringert.

Ein schneller Multiplizierer bildet Teilprodukte parallel. Ein Carry-Save-Addierer komprimiert drei Wörter zu zwei, ohne Überträge über das Wort weiterzuleiten. Wallace- oder Dadda-Bäume wiederholen diese Reduktion und verwenden anschließend einen letzten Addierer mit Übertragsweiterleitung. Die Reduktion von 32 Zeilen auf zwei benötigt acht Carry-Save-Ebenen. Pipelining erlaubt die gleichzeitige Bearbeitung mehrerer Produkte; dass in jedem Zyklus ein neues angenommen wird, bedeutet nicht, dass jedes in einem Zyklus fertig ist.

Bei einem vorzeichenbehafteten Ergebnis, das auf n Bits verkürzt wird, muss jedes Bit der höherwertigen Hälfte dem Vorzeichenbit der niederwertigen Hälfte entsprechen. −8 × −1 mit vier Bit ergibt das vollständige Produkt 0000 1000. Die höherwertige Hälfte ist null, aber das beibehaltene Vorzeichenbit ist 1, daher passt +8 nicht in das vorzeichenbehaftete Zielformat.

Wichtige Erkenntnisse

  • Vorzeichenlose Beträge erhalten den Betrag des kleinsten negativen vorzeichenbehafteten Operanden.
  • Vorzeichenbehaftete und vorzeichenlose Produkte haben dieselbe niederwertige Hälfte, können aber unterschiedliche höherwertige Hälften haben.
  • Der Booth-Algorithmus nutzt ein zusätzliches Akkumulatorbit, Entscheidungen anhand von Bitpaaren und arithmetische Rechtsverschiebungen.
  • Folgen von Bits mit dem Wert 1 können durch zwei Booth-Operationen ersetzt werden; wechselnde Muster sparen möglicherweise keinen Aufwand.
  • Carry-Save-Bäume reduzieren viele Teilprodukte vor einer abschließenden Addition mit Übertragsweiterleitung.
  • Pipelining trennt die Ergebnislatenz von der Rate, mit der neue Produkte gestartet werden können.
  • Ein vorzeichenbehaftetes Produkt passt in das schmale Zielformat, wenn die höherwertige Hälfte die Vorzeichenerweiterung der niederwertigen Hälfte ist.

3.3 Dividiere ganze Zahlen und behandle die Sonderfälle

Die Division erzeugt einen Quotienten und einen Rest, die durch folgende Gleichung verbunden sind:

Dividend=Quotient×Divisor+Rest.

Bei einem vorzeichenlosen Divisor ungleich null ist der Rest nicht negativ und kleiner als der Divisor. Ein n-Bit-Dividend und ein n-Bit-Divisor benötigen einen n-Bit-Quotienten und einen n-Bit-Rest.

Erzeuge den Quotienten Bit für Bit

Lies die Dividendenbits vom höchstwertigen Ende aus. Verdopple den Teilrest, hole das nächste Bit herein und prüfe, ob der Divisor hineinpasst. Ist das der Fall, subtrahiere ihn und schreibe das Quotientenbit 1; andernfalls behalte den Teilrest und schreibe 0.

Bei 0111 dividiert durch 0010 sind die nach dem Herunterholen entstehenden Teilreste 0, 1, 3 und 3. Die ersten beiden sind kleiner als 2, daher sind ihre Quotientenbits 0. Jede 3 erlaubt eine Subtraktion, die den Rest 1 und das Quotientenbit 1 ergibt. Der Quotient ist 0011 und der Rest 0001: 3 × 2 + 1 = 7.

Die restaurierende Division versucht zuerst eine Subtraktion. Ist das Probeergebnis negativ, addiere den Divisor zurück und schreibe 0; andernfalls behalte es und schreibe 1. Erkenne einen Fehlschlag anhand eines Borgübertrags oder einer vorzeichenbehafteten n + 1-Bit-Differenz. Eine n-Bit-Vorzeichenprüfung ist unsicher: 0 − 9 mit vier Bit bricht zu 0111 um, dessen höchstwertiges Bit trotz des Borgübertrags 0 ist.

Kompakte Hardware legt den Dividenden in die niederwertige Hälfte eines 2n-Bit-Registers und den Teilrest in die höherwertige Hälfte. Sie verschiebt bei jedem Schritt nach links und fügt rechts Quotientenbits ein. Am Ende enthält die höherwertige Hälfte den Rest und die niederwertige den Quotienten.

Die nichtrestaurierende Division übernimmt ein negatives Probeergebnis in den nächsten Schritt und addiert dort den Divisor, statt sofort zu restaurieren. Ein abschließend negativer Teilrest benötigt eine letzte Rückaddition. Die SRT-Division wählt mithilfe führender Bits von Divisor und Rest mehrere Quotientenbits pro Schritt; fehlende Einträge in einer solchen Auswahltabelle verursachten 1994 den Pentium-FDIV-Fehler. Die Division bleibt von jedem vorherigen Teilrest abhängig.

Wende vorzeichenbehaftete Division mit Abschneiden an

Dividiere die Beträge, negiere den Quotienten bei unterschiedlichen Vorzeichen und gib einem Rest ungleich null das Vorzeichen des Dividenden.

RechnungQuotientRest
−7 dividiert durch 2−3−1
7 dividiert durch −2−31
−7 dividiert durch −23−1

Diese Ergebnisse schneiden den Quotienten in Richtung null ab und erfüllen die Divisionsgleichung. RISC-V, Java und C seit C99 verwenden diese Regel. Python // rundet stattdessen ab: -7 // 2 ist −4 und -7 % 2 ist 1.

Behandle besondere Eingaben

Die RISC-V-Division durch null liefert einen Quotienten, dessen Bits alle gesetzt sind, und den ursprünglichen Dividenden als Rest. Der vorzeichenbehaftete Überlauffall, der kleinste negative Wert dividiert durch −1, liefert den kleinsten negativen Wert als Quotienten und null als Rest. Keiner der Fälle löst einen Trap aus. x86 löst für beide eine Divisionsfehlerausnahme aus. Software, die Fehler melden muss, prüft zuerst auf null und prüft auch das Operandenpaar für vorzeichenbehafteten Überlauf.

Eine logische Rechtsverschiebung dividiert vorzeichenlose Werte durch Zweierpotenzen und rundet ab. Eine arithmetische Verschiebung rundet auch negative Werte ab: −5 um eine Stelle nach rechts verschoben wird zu −3, während die Division durch 2 mit Abschneiden −2 ergibt. Um das Abschneiden mit einer Verschiebung umzusetzen, addiere vor dem Rechtsverschieben um k zu einer negativen Eingabe 2k−1. Verschiebe für −5 und k = 1 den Wert −4, um −2 zu erhalten.

Wichtige Erkenntnisse

  • Quotient und Rest müssen die Divisionsgleichung erfüllen.
  • Die restaurierende Division addiert den Divisor nach einer fehlgeschlagenen Probesubtraktion zurück.
  • Für die sichere Prüfung einer vorzeichenlosen Probesubtraktion ist ein Borgübertrag oder ein zusätzliches Differenzbit nötig.
  • Bei vorzeichenbehafteter Division mit Abschneiden erhält ein Rest ungleich null das Vorzeichen des Dividenden.
  • RISC-V definiert Ergebnisse ohne Trap für Division durch null und vorzeichenbehafteten Quotientenüberlauf.
  • Arithmetische Rechtsverschiebung und vorzeichenbehaftete Division mit Abschneiden unterscheiden sich bei negativen Werten mit Rest.
4

Stelle reelle Zahlen als Gleitkommazahlen nach IEEE 754 dar

Eine Gleitkommazahl speichert ein Vorzeichen, eine Größenordnung und eine begrenzte Anzahl signifikanter Bits. Dekodiere diese Felder, um Wertebereich und Genauigkeit zu unterscheiden, und erkenne dann anhand der reservierten Exponentenmuster Nullwerte, subnormale Zahlen, Unendlichkeitswerte und NaNs. Die Sonderwerte sind Teil des arithmetischen Systems: Sie lassen winzige Ergebnisse sich schrittweise null nähern und ermöglichen es, dass Ausnahmeoperationen definierte Ergebnisse zurückgeben und dabei Statusflags setzen.

4.1 Kodiere und dekodiere Binärformate nach IEEE 754

Ein normaler binärer Gleitkommawert hat die Form

(−1)s×1,f×2e.

Der Signifikand ist der vollständige Wert 1,f; die gespeicherte Mantisse enthält nur f. Die Normalisierung garantiert die führende 1, sodass das Weglassen dieses impliziten Bits ein Bit an Genauigkeit gewinnt.

Lies die drei Felder
FormatVorzeichenbitsExponentenbitsMantissenbitsBiasGenauigkeit
binary1615101511 Bit
binary32182312724 Bit
binary6411152102353 Bit

IEEE 754-2019 definiert diese Formate. Einfache und doppelte Genauigkeit bezeichnen meist binary32 und binary64. Die gespeicherte Reihenfolge ist Vorzeichen, Exponent, Mantisse. Subtrahiere bei einem normalen Wert den Bias vom vorzeichenlosen Exponentenfeld:

Wert=(−1)S(1+Mantisse)2E−Bias.

Mantisse bezeichnet den Binärbruch nach dem Komma, nicht dessen als ganze Zahl gelesene Bits. In binary32 kodieren die Exponentenfelder 1 bis 254 die Exponenten −126 bis 127. Die Felder 0 und 255 haben besondere Bedeutungen.

Ein Bias bewirkt, dass größere Exponenten größere vorzeichenlose Felder haben. Bei positiven endlichen Zahlen entspricht die vorzeichenlose Reihenfolge der vollständigen Bitmuster der numerischen Reihenfolge. Negative Werte und NaNs erfordern eine zusätzliche Behandlung.

Kodiere und dekodiere

Um −0,75 zu kodieren, schreibe seinen Betrag als 0,112=1,12×2−1. Das Vorzeichen ist 1 und das Exponentenfeld ist −1 + 127 = 126, also 01111110. Lass die implizite führende 1 weg und fülle die Mantisse mit Nullen auf. Die Felder sind 1 01111110 10000000000000000000000, was 0xBF400000 ergibt. In binary64 ist derselbe Wert 0xBFE8000000000000.

Um 0x41460000 zu dekodieren, zerlege es in 0 10000010 10001100000000000000000. Das Exponentenfeld ist 130, der tatsächliche Exponent also 3. Der Signifikand ist

1,1000112=1+12+132+164=1,546875.

Die Multiplikation mit 8 ergibt 12,375. Würdest du die implizite 1 in die gespeicherte Mantisse schreiben, änderte sich der Wert; würdest du −1 direkt im Exponentenfeld speichern, ginge die Bias-Regel verloren.

Unterscheide Wertebereich und Genauigkeit

binary32 erreicht ungefähr 3,40×1038, mit dem kleinsten positiven normalen Wert 2−126 und etwa sieben signifikanten Dezimalstellen. binary64 erreicht ungefähr 1,80×10308, mit dem kleinsten positiven normalen Wert 2−1022 und etwa 15–16 signifikanten Stellen. binary16 hat den Höchstwert 65.504, den kleinsten positiven normalen Wert 2−14, den kleinsten positiven subnormalen Wert 2−24 und etwa 3,3 signifikante Dezimalstellen.

Die Genauigkeit zählt signifikante Stellen, nicht Stellen nach dem Dezimalkomma. Zum Beispiel speichert binary32 1.234.567,89 als 1.234.567,875.

Innerhalb des binary32-Intervalls von 2e bis unter 2e+1 haben benachbarte normale Werte den Abstand 2e−23. Dieser Abstand ist eine ulp, eine Einheit der letzten Stelle. Direkt über 1 ist er 2−23 und wird häufig Maschinenepsilon genannt. Bei 224 wird der Abstand 2, sodass 16.777.217 fehlt, obwohl viel größere Zahlen darstellbar sind. Mehr Exponentenbits erweitern den Bereich der Größenordnungen; mehr Mantissenbits lassen darstellbare Werte bei einer gegebenen Größenordnung dichter beieinanderliegen.

Wichtige Erkenntnisse

  • Normale Formate lassen die garantierte führende 1 in der gespeicherten Mantisse weg.
  • Dekodiere einen normalen Exponenten, indem du seinen Bias subtrahierst.
  • binary16, binary32 und binary64 haben eine Genauigkeit von 11, 24 und 53 Bit.
  • Wertebereich und Genauigkeit sind unterschiedliche Beschränkungen.
  • Der Abstand normaler Zahlen wächst mit dem Exponenten.

4.2 Verwende Nullwerte, Unendlichkeitswerte, NaNs und subnormale Zahlen

Reservierte Exponentenmuster ermöglichen es IEEE 754, Werte jenseits gewöhnlicher normalisierter Zahlen darzustellen. Ordne die Felder immer ein, bevor du eine Formel für den Wert anwendest.

Erkenne die reservierten Muster
ExponentenfeldMantissenfeldBedeutung
Nur NullenNullVorzeichenbehaftete Null
Nur NullenUngleich nullSubnormale Zahl
Nur EinsenNullVorzeichenbehafteter Unendlichkeitswert
Nur EinsenUngleich nullNaN

binary32 hat +0 bei 0x00000000 und −0 bei 0x80000000. Sie sind beim Vergleich gleich, aber eine Division kann das Vorzeichen sichtbar machen: 1 dividiert durch +0 ergibt +∞, während 1 dividiert durch −0 −∞ ergibt. Ein winziges negatives Ergebnis, das auf null gerundet wird, wird zu −0.

Positiv unendlich ist 0x7F800000; der größte endliche positive Wert ist 0x7F7FFFFF. Bei Rundung zur nächsten Zahl liefert ein arithmetischer Überlauf einen vorzeichenbehafteten Unendlichkeitswert. Auch die Division eines endlichen Werts ungleich null durch null liefert einen vorzeichenbehafteten Unendlichkeitswert, aber mit einem anderen Ausnahmeflag. Spätere Rechnungen behandeln Unendlich konsistent: Die Addition von 1 zu +∞ lässt +∞ unverändert, die Multiplikation mit −2 ergibt −∞, und der Kehrwert ist +0.

Unterscheide NaN von Unendlich

Operationen wie null dividiert durch null, unendlich minus sich selbst, null mal unendlich und die reelle Quadratwurzel von −1 haben kein aussagekräftiges numerisches Ergebnis. Sie erzeugen NaN, „keine Zahl“, und signalisieren eine ungültige Operation.

NaN ist ungeordnet: Gleichheits- und ordnende Kleiner-als- oder Größer-als-Vergleiche mit NaN sind falsch, während Ungleichheit wahr ist. Insbesondere kann x == NaN NaN nicht erkennen. Verwende isnan(x). Stille NaNs pflanzen sich normalerweise durch Rechnungen fort; signalisierende NaNs lösen bei Verwendung eine ungültige Operation aus. In diesen Binärformaten kennzeichnet das höchstwertige Mantissenbit ein stilles NaN. Das kanonische stille binary32-NaN von RISC-V ist 0x7FC00000.

Nähere dich null schrittweise

Eine subnormale Zahl hat keine implizite 1. Ihr Exponent ist auf den kleinsten normalen Exponenten festgelegt:

Wert=(−1)S×0,f×21−Bias.

Für binary32 ist 0x00000001 gleich 2−149 und 0x00400000 gleich 2−127. Für binary64 ist der kleinste positive Wert 2−1074. Würde man bei einem Exponentenfeld null Exponent minus Bias verwenden, läge man um einen Faktor zwei daneben, selbst bevor eine fälschliche implizite 1 hinzugefügt würde.

Subnormale Zahlen ermöglichen graduellen Unterlauf: Die Genauigkeit nimmt mit schrumpfenden Werten ab, bei festem absolutem Abstand nahe null. Verschiedene endliche Werte eines Formats haben weiterhin eine darstellbare Differenz ungleich null. Flush-to-Zero-Modi verzichten auf diesen Schutz und können auf manchen Prozessoren die Verarbeitung subnormaler Zahlen beschleunigen.

Lies die Ausnahmeflags

IEEE 754 definiert ungültige Operation, Division durch null, Überlauf, Unterlauf und Ungenauigkeit. Die Standardbehandlung liefert ein Ergebnis und hält den Status fest; sie muss die Ausführung nicht stoppen. Ungenauigkeit bedeutet, dass das gerundete Ergebnis vom exakten abweicht.

Bei der Standardbehandlung setzt Unterlauf sowohl einen sehr kleinen als auch einen ungenauen Wert voraus. In binary32 ist 2−126/2=2−127 eine exakte subnormale Zahl und löst keinen Unterlauf aus. RISC-V hält NV, DZ, OF, UF und NX in fflags innerhalb von fcsr fest, und Gleitkommaausnahmen lösen keine arithmetischen Traps aus. Ein zurückgegebener Unendlichkeitswert allein zeigt nicht, ob ein Überlauf oder eine Division durch null auftrat; prüfe das Flag.

Wichtige Erkenntnisse

  • Ordne reservierte Exponentenfelder ein, bevor du einen normalen Wert dekodierst.
  • Vorzeichenbehaftete Nullwerte sind beim Vergleich gleich, können aber Unendlichkeitswerte mit unterschiedlichen Vorzeichen ergeben.
  • NaN ist ungeordnet und muss mit einem NaN-Test erkannt werden.
  • Subnormale Zahlen verwenden eine führende 0 und den Exponenten eins minus Bias.
  • Gradueller Unterlauf erhält kleine Differenzen, die beim Ersetzen durch null verloren gehen können.
  • Ein exaktes subnormales Ergebnis setzt das Unterlauf-Flag nicht.
5

Rechne und runde mit Gleitkommazahlen

Gleitkommahardware muss signifikante Bits verschieben und kombinieren, bevor sie das Ergebnis runden kann. Arbeite Exponentenangleichung, Normalisierung und Rundung durch und verbinde diese Schritte dann mit vertrauten Genauigkeitsfehlern. Zusätzliche Rundungsbits unterscheiden einen Gleichstand von einem knapp darüberliegenden Wert, und die verschmolzene Multiplikation und Addition erhält Informationen, die bei zwei getrennten Operationen verloren gehen können. Dieselben Beschränkungen erklären veränderte Summen, stehen bleibende Zähler und riskante Umwandlungen.

5.1 Addiere und multipliziere Gleitkommazahlen

Die Gleitkommaarithmetik verarbeitet Signifikanden und Exponenten getrennt. Das Endergebnis muss der exakten Operation entsprechen, gerundet auf das Zielformat. Daher müssen die zwischenzeitlichen Bitverschiebungen genug Information für diese letzte Entscheidung erhalten.

Addiere mit einem gemeinsamen Exponenten

Die Addition folgt vier Stufen: Angleichen, Rechnen, Normalisieren, Runden. Vergleiche die Exponenten und verschiebe den Signifikanden des kleineren Operanden um ihre Differenz nach rechts. Addiere bei gleichen Vorzeichen die Beträge; subtrahiere bei unterschiedlichen Vorzeichen die Beträge. Verschiebe das Ergebnis in normalisierte Form und passe seinen Exponenten an. Runde anschließend und normalisiere erneut, falls beim Runden ein Übertrag entsteht.

Verwende Vier-Bit-Signifikanden, um 0,5 + (−0,4375) nachzuvollziehen:

  1. Schreibe die Operanden als 1,0002×2−1 und −1,1102×2−2.
  2. Gleiche den zweiten zu −0,1112×2−1 an.
  3. Subtrahiere die Beträge: 1,0002−0,1112=0,0012.
  4. Normalisiere zu 1,0002×2−4, also 0,0625. Es gingen keine Bits ungleich null verloren, daher muss das Ergebnis durch Rundung nicht geändert werden.

Auslöschung kann eine große Linksverschiebung zur Normalisierung nötig machen. Die Hardware nutzt einen Exponentensubtrahierer, einen Schieber zur Exponentenangleichung, einen Signifikandaddierer, einen Zähler führender Nullen sowie Normalisierungs- und Rundungslogik. Gleitkommaaddierer sind häufig über mehrere Zyklen als Pipeline aufgebaut.

Ein Dezimalmodell zeigt, warum zusätzliche Ziffern wichtig sind: Bei vier signifikanten Stellen wird 99,99 + 0,161 zu 9,999+0,01610 auf der Größenordnung 101 angeglichen. Das exakte Zwischenergebnis ist 10,01510 auf dieser Größenordnung. Normalisiere zu 1,00151×102 und runde zu 1,002×102. Würde der angeglichene Summand zu früh abgeschnitten, ginge Information verloren, die zur Wahl von 100,2 nötig ist.

Multipliziere Größenordnungen und Signifikanden

Multipliziere die Signifikanden, addiere die tatsächlichen Exponenten und verknüpfe die Vorzeichen mit XOR. Subtrahiere bei Feldern mit Bias einmal den Bias:

Eresult=Ea+Eb−Bias

Dies geschieht vor Anpassungen durch die Normalisierung. Zwei normale Signifikanden ergeben multipliziert einen Wert von 1 bis unter 4, sodass ihr Produkt höchstens eine Rechtsverschiebung zur Normalisierung benötigt. Das Runden kann eine weitere Anpassung nötig machen; auch die Exponentenschranken müssen geprüft werden.

Für 0,5 × (−0,4375) ergeben die binary32-Exponentenfelder 126 + 125 − 127 = 124, also den tatsächlichen Exponenten −3. Das Signifikandprodukt ist 1,0002×1,1102=1,1102. Das Vorzeichen-XOR ist 1, was −1,1102×2−3=−0,21875 ergibt.

Runde einmal mit verschmolzener Multiplikation und Addition

FMA berechnet a × b + c mit einer Rundung nach dem vollständigen Ausdruck. Getrennte Multiplikation und Addition runden zweimal. Nimm in binary32 a=1+2−23, b=1−2−23 und c = −1. Ihr exaktes Produkt ist 1−2−46. Eine separate Multiplikation rundet dies zu 1, sodass die Addition null ergibt. FMA erhält die kleine Produktdifferenz und liefert −2−46.

RISC-V F stellt 32 Gleitkommaregister bereit, f0 bis f31; D verbreitert denselben Registersatz für doppelte Genauigkeit. flw/fsw und fld/fsd übertragen Werte. Zu den Rechenbefehlen gehören fadd.s, fmul.s, fdiv.s und fsqrt.s, mit .d-Formen für doppelte Genauigkeit. fmadd.s berechnet eine verschmolzene Multiplikation und Addition. Vergleiche wie flt.s schreiben 0 oder 1 in ein Ganzzahlregister, und fcvt wandelt Formate oder Ganzzahlwerte um.

Wichtige Erkenntnisse

  • Die Addition gleicht Exponenten an, bevor sie Signifikanden kombiniert.
  • Die Normalisierung ändert sowohl die Position des Signifikanden als auch den Exponenten.
  • Beim Multiplizieren mit Exponentenfeldern mit Bias muss einmal der Bias subtrahiert werden.
  • Rundung kann eine zweite Normalisierung nötig machen.
  • FMA rundet das vollständige Ergebnis aus Produkt und Summe einmal.
  • Die RISC-V-Arithmetik mit F und D nutzt einen Gleitkommaregistersatz; Vergleiche liefern ganzzahlige Wahrheitswerte.

5.2 Runde Ergebnisse korrekt

Ein endliches Format kann nicht jedes exakte Ergebnis speichern. Korrekte Rundung bedeutet, das von der Rundungsrichtung verlangte darstellbare Ergebnis zu wählen, als wäre die Operation zuerst exakt berechnet worden. Grundrechenarten, Quadratwurzel und FMA folgen dieser Regel. Nutzdaten- und Vorzeichenbits von NaNs müssen auf verschiedenen Prozessoren nicht identisch sein.

Wähle eine Rundungsrichtung
RichtungRegel
roundTiesToEvenNächster Wert; bei exaktem Gleichstand wird ein letztes Signifikandbit von 0 gewählt
roundTowardPositiveIn Richtung +∞
roundTowardNegativeIn Richtung −∞
roundTowardZeroIn Richtung null
roundTiesToAwayNächster Wert; bei exaktem Gleichstand von null weg

Die ersten vier sind für binäre Implementierungen vorgeschrieben; die Rundung zur geraden Endziffer bei Gleichstand ist die Voreinstellung. Die Rundung bei Gleichstand von null weg ist für Dezimalformate vorgeschrieben, und RISC-V bietet sie auch für binäre Operationen. Die Bezeichnungen sind RNE, RUP, RDN, RTZ und RMM; ein Befehl kann einen Modus direkt wählen oder den dynamischen Modus in fcsr verwenden.

Bei Rundung auf ganze Zahlen mit gerader Endziffer bei Gleichstand wird 2,5 zu 2 und 3,5 zu 4. Binär wird bei Vier-Bit-Signifikanden 1,00112 zu 1,0102 gerundet und 1,01012 ebenfalls zu 1,0102. Das gerade Bit gehört zum beibehaltenen Signifikanden, nicht zum Exponenten oder einer ausgegebenen Dezimalziffer.

Behalte Schutz-, Rundungs- und Sticky-Informationen

Behalte nach der Normalisierung zwei zusätzliche Bits hinter dem Zielsignifikanden: Schutzbit und Rundungsbit. Das Sticky-Bit ist die ODER-Verknüpfung jedes später verworfenen Bits. Es hält fest, ob dieser gesamte Rest null ist.

Bei Rundung zur nächsten Zahl bedeutet Schutzbit 0, dass der Wert unter der Hälfte liegt. Schutzbit 1 mit Rundungs- oder Sticky-Bit 1 bedeutet, dass er über der Hälfte liegt. Schutzbit 1 mit beiden späteren Kennzeichen 0 bedeutet einen exakten Gleichstand. Erhöhe bei Gleichstand den beibehaltenen Signifikanden nur, wenn sein aktuelles niederwertigstes Bit 1 ist.

Für eine Summe von 8 + 0,5625 mit Vier-Bit-Signifikanden ergibt die Exponentenangleichung

1,00010012×23.

Behalte 1.000; das Schutzbit ist 1, das Rundungsbit 0 und das Sticky-Bit 1, weil der verbleibende Rest eine 1 enthält. Der Wert liegt über der Hälfte, erhöhe daher auf 1,0012×23=9. Würde das Sticky-Bit verworfen, entstünde fälschlich ein Gleichstand und 8 würde gewählt.

Ein Sticky-Bit ist ein Nachweis über alle verlorenen Bits, nicht einfach das dritte Bit nach dem beibehaltenen Teil. Sobald beim Verschieben irgendein verlorenes Bit 1 ist, bleibt der Sticky-Zustand für diesen angesammelten Rest 1.

Deute Fehler und Überlauf

Für endliche Ergebnisse innerhalb des Wertebereichs hat die Rundung zur nächsten Zahl einen absoluten Fehler von höchstens einer halben ulp; gerichtete Rundung hat einen Fehler unter einer ulp. Für normale binary32-Ergebnisse ist die übliche relative Schranke bei Rundung zur nächsten Zahl 2−24; für binary64 ist sie 2−53. Bei subnormalen Ergebnissen muss der absolute Fehler betrachtet werden, weil ihre relative Genauigkeit abnimmt.

Die Rundungsrichtung steuert auch Überlaufergebnisse. Positiver Überlauf ergibt bei Rundung zur nächsten Zahl oder in Richtung positiv +∞, bei Rundung in Richtung null oder negativ aber den größten endlichen positiven Wert. Negativer Überlauf verhält sich spiegelbildlich.

Für Ganzzahlumwandlungen gelten eigene Regeln. In C schneiden darstellbare Typumwandlungen wie (int)2.7 und (int)-2.7 auf 2 und −2 ab, unabhängig von der aktuellen Gleitkomma-Rundungsrichtung. Prüfe sowohl den Zielwertebereich als auch den verworfenen Bruchteil.

Wichtige Erkenntnisse

  • Korrekte Rundung wählt den Zielwert anhand des exakten Ergebnisses und der Rundungsrichtung.
  • Bei einem exakten Gleichstand wählt die Rundung zur nächsten Zahl den Nachbarwert, dessen beibehaltenes niederwertigstes Bit 0 ist.
  • Schutz- und Rundungsbit erhalten zwei zusätzliche Bits; das Sticky-Bit hält jeden Rest ungleich null dahinter fest.
  • Ein Sticky-Bit ungleich null kann ein Ergebnis über der Hälfte von einem Gleichstand unterscheiden.
  • Die Rundungsrichtung steuert, ob ein Überlauf Unendlich oder einen endlichen Endwert zurückgibt.

5.3 Erkenne drohende Genauigkeitsfehler und vermeide sie

Gleitkommafehler ergeben sich oft direkt aus dem endlichen Abstand darstellbarer Werte. Unterscheide den bereits in gespeicherten Operanden vorhandenen Fehler von der Rundung durch eine Operation und von Informationen, die bei der Umwandlung verloren gehen.

Erkenne Darstellungsfehler

Ein gekürzter Bruch hat genau dann eine endliche Binärentwicklung, wenn sein Nenner eine Zweierpotenz ist. Werte wie 0,5, 0,25 und 0,375 sind exakt. Die Entwicklung von 0,1 wiederholt sich, daher speichert binary32 0x3DCCCCCD, etwa 0,10000000149011612. Auch binary64 speichert eine Näherung.

Folglich ergibt binary64 0.1 + 0.2 den Wert 0,30000000000000004, der sich vom gespeicherten Wert unterscheidet, der 0,3 am nächsten liegt. Ein kurzes ausgegebenes Ergebnis wie 0.1 kann die kürzeste Dezimalzahl sein, die bei Rückumwandlung dieselben gespeicherten Bits ergibt; es belegt keine Exaktheit.

Verwende für näherungsweise endliche Ergebnisse eine passend zum Problem gewählte Toleranz, zum Beispiel

∣a−b∣≤max⁡(atol,rtolmax⁡(∣a∣,∣b∣)).

Die absolute Toleranz behandelt Werte nahe null; die relative Toleranz skaliert mit dem Betrag. Die Toleranzen sollten die Rechnung und den akzeptablen Fehler berücksichtigen, nicht nur die Anzahl ausgegebener Stellen.

Achte darauf, wie eine Addition eine kleine Eingabe verliert

Absorption tritt bei Rundung zur nächsten Zahl auf, wenn ein kleiner Summand einen großen Operanden nicht zu seinem nächsten darstellbaren Nachbarwert bewegen kann. In binary32 wird 16.777.216 + 1 wieder zu 16.777.216 gerundet: Die Nachbarwerte haben den Abstand zwei, und bei diesem Gleichstand wird der gerade Signifikand gewählt. Ein float-Zähler, der 1 addiert, kann daher aufhören zu wachsen.

Eine Änderung der Additionsreihenfolge kann das Ergebnis ändern. Bei binary32 mit x = −1,5 × 10³⁸, y = 1,5 × 10³⁸ und z = 1 ergibt (x + y) + z den Wert 1. Aber y + z wird zu y gerundet, sodass x + (y + z) null ergibt. Die Addition ist nicht assoziativ. Parallele Reduktionen können ihre Gruppierung bei Änderung der Threadanzahl ändern, was die letzten Bits beeinflusst.

Auch wiederholtes Runden summiert sich: Die Addition von binary32 0,1 zehn Millionen Mal zu einer binary32-Summe ergibt 1.087.937 statt 1.000.000. Ein breiterer Akkumulator verringert den Rundungsverlust. Werden kleinere Beträge zuerst addiert, können außerdem Beiträge erhalten bleiben, die eine große laufende Summe absorbieren würde.

Unterscheide Auslöschung von ungenauer Subtraktion

Auslöschung entfernt gemeinsame führende Stellen nahezu gleicher Operanden. Die Subtraktion selbst kann exakt sein, während frühere Operandenfehler im Verhältnis zum kleinen Ergebnis groß werden. In binary32 wird 1,0000001 als 1+2−23 gespeichert. Die Subtraktion von 1 ergibt etwa 1,1920929×10−7 statt 1,0×10−7, rund 19 % relativen Fehler.

Prüfe Umwandlungen und Formatwahl

binary64 stellt jede 32-Bit-Ganzzahl exakt dar. binary32 tut das nicht: 16.777.217 wird bei Rundung zur geraden Endziffer bei Gleichstand zu 16.777.216 gerundet. Oberhalb von 253 fehlen auch in binary64 manche ganzen Zahlen. Die Umwandlung eines Gleitkommawerts in einen kleineren Ganzzahltyp kann dessen Wertebereich vollständig überschreiten.

Beim Erstflug der Ariane 5 im Jahr 1996 führte eine Umwandlung außerhalb des Wertebereichs von einer 64-Bit-Gleitkommazahl in eine vorzeichenbehaftete 16-Bit-Ganzzahl zur Abschaltung der Trägheitsreferenzsysteme und trug zum Verlust der Rakete bei. Beim Patriot-Versagen 1991 in Dhahran summierte sich bei einer abgeschnittenen Festkommanäherung von 0,1 nach etwa 100 Stunden ein Zeitfehler von etwa 0,34 s, wodurch sich das Verfolgungsfenster um etwa 687 m verschob. Dies war ein Festkomma-Darstellungsfehler, keine IEEE-Gleitkommaoperation.

Wähle binary64 für höhere allgemeine Genauigkeit, binary32, wenn sein geringerer Speicherbedarf zur Aufgabe passt, und binary16 oder bfloat16 für geeignete Aufgaben mit geringer Genauigkeit. bfloat16 hat acht Exponenten- und sieben Mantissenbits. Exakte Geldbeträge gehören in ganzzahlige kleinere Währungseinheiten oder einen Dezimaltyp.

Wichtige Erkenntnisse

  • Ein endlicher Binärbruch benötigt nach dem Kürzen einen Nenner, der eine Zweierpotenz ist.
  • Eine kurze Dezimalausgabe kann Darstellungsfehler verbergen.
  • Absorption und wiederholtes Runden können Summen verändern und Gleitkommazähler anhalten.
  • Gleitkommaaddition ist nicht assoziativ, daher beeinflusst die Gruppierung die Reproduzierbarkeit.
  • Auslöschung macht frühere Operandenfehler im Verhältnis zu einer kleinen Differenz sichtbar.
  • Bei Umwandlungen müssen Genauigkeit und Wertebereich geprüft werden.
  • Die Formatwahl hängt von benötigter Genauigkeit, Wertebereich und Speicheraufwand ab.

Rechnerarithmetik: Beispiele

5 Interaktive Lektionen

1

Verfolge einen Addierer und beurteile sein Ergebnis

12 Schritte
Verfolge Addition und Subtraktion durch einen 8-Bit-Addierer und unterscheide anschließend die Signale für vorzeichenlose und vorzeichenbehaftete Bereichsprüfungen.
  1. 1
    EinführungErst die Bits, dann die Interpretation

    Ein 8-Bit-Addierer behält acht Summenbits und erzeugt einen Ausgangsübertrag. Dieselben Summenbits können einen vorzeichenlosen Wert oder einen vorzeichenbehafteten Wert im Zweierkomplement darstellen. Ob sie dem beabsichtigten Ergebnis entsprechen, hängt von dieser Lesart ab.

    Beginne mit 58 + 27. Beide Werte passen in beide Interpretationen, sodass du zuerst die Schaltung verfolgen und anschließend die Fragen zum Wertebereich stellen kannst.

  2. 2
    ErklärungEine Position kombiniert drei Bits

    Ein Volladdierer kombiniert zwei Eingangsbits und den Eingangsübertrag. Seine Summe ist deren XOR. Sein Ausgangsübertrag ist 1, wenn mindestens zwei der drei Eingänge 1 sind.

    In einem Ripple-Carry-Addierer wird dieser Ausgangsübertrag zum Eingangsübertrag der nächsten Position. Nur die niederwertigste Position erhält den anfänglichen Übertrag direkt. Bei gewöhnlicher Addition ist der anfängliche Übertrag null.

  3. 3
    BeispielBerechne die niederwertigen Spalten

    Schreibe 58 als 0011 1010 und 27 als 0001 1011. Von rechts beginnend addiert Bit 0 die Werte 0 und 1 mit Übertrag 0, was Summe 1 und Übertrag 0 ergibt.

    Bit 1 addiert 1 und 1 und ergibt Summe 0 und Übertrag 1. Bit 2 addiert dann 0 und 0 mit diesem Übertrag und ergibt Summe 1 und Übertrag 0. Der Übertrag muss dort berücksichtigt werden, wo er ankommt, auch wenn beide Operandenbits null sind.

  4. 4
    BeispielStelle die Summe fertig

    Fahre mit den höherwertigen Positionen fort. Bit 3 addiert zwei Bits mit dem Wert 1 und erzeugt Summe 0 und Übertrag 1. Bit 4 kombiniert zwei Bits mit dem Wert 1 mit diesem Übertrag und erzeugt Summe 1 und Übertrag 1. Bit 5 kombiniert 1, 0 und 1 und erzeugt Summe 0 und Übertrag 1. Bit 6 erhält diesen Übertrag und erzeugt 1.

    Das fertige Ergebnis ist 0101 0101, also 85. Der abschließende Übertrag ist 0, und das vorzeichenbehaftete Ergebnis bleibt positiv.

  5. 5
    HerausforderungWähle die Erweiterung

    Ein vorzeichenbehafteter 4-Bit-Operand 1011 muss zu einem 8-Bit-Operanden addiert werden. Welches 8-Bit-Muster erhält seinen Wert, und was würde eine Nullerweiterung bewirken?

    ---reveal---

    Die Vorzeichenerweiterung ergibt 1111 1011, weiterhin −5. Die Nullerweiterung ergibt 0000 1011, also +11, und ändert die Eingabe vor der Addition. Die Erweiterung richtet sich nach der Interpretation des Operanden, nicht nach der Breite des anderen Operanden.

  6. 6
    BeispielVerwende den Addierer erneut für die Subtraktion

    Berechne nun 58 − 27. Invertiere 0001 1011 zu 1110 0100 und setze den anfänglichen Übertrag auf 1. Addiere 0011 1010 + 1110 0100 + 1, um 0001 1111 mit Ausgangsübertrag 1 zu erhalten.

    Das Ergebnis ist 31. Bei dieser vorzeichenlosen Subtraktion bedeutet Ausgangsübertrag 1, dass kein Borgübertrag nötig ist. Die Invertierung des zweiten Operanden ohne die anfängliche 1 würde stattdessen 30 ergeben.

  7. 7
    KernaussageÜbertrag und Überlauf beantworten unterschiedliche Fragen

    Der Ausgangsübertrag zeigt, ob eine vorzeichenlose Addition die verfügbaren Bits überschritten hat. Der vorzeichenbehaftete Überlauf prüft den vorzeichenbehafteten Wertebereich: Summanden mit gleichem Vorzeichen dürfen kein Ergebnis mit entgegengesetztem Vorzeichen erzeugen.

    Die Hardware berechnet den vorzeichenbehafteten Überlauf, indem sie den Eingangs- und den Ausgangsübertrag des Vorzeichenbits mit XOR verknüpft. Es kann einen Übertrag ohne vorzeichenbehafteten Überlauf geben, einen vorzeichenbehafteten Überlauf ohne Übertrag, beides oder keines von beiden.

  8. 8
    BeispielEine vorzeichenlos gültige Summe kann vorzeichenbehaftet überlaufen

    Addiere 90 und 60 mit 8 Bit. Das Ergebnis ist 1001 0110 mit Ausgangsübertrag 0. Vorzeichenlos passt 150 in den Bereich von 0 bis 255.

    Beide vorzeichenbehafteten Eingaben sind positiv, aber der gespeicherte Wert wird vorzeichenbehaftet als −106 gelesen. Der vorzeichenbehaftete Überlauf ist daher 1. Das gespeicherte Muster besteht weiterhin aus den niederwertigen acht Bits von 150; der vorzeichenbehaftete Zielwertebereich kann das exakte Ergebnis nicht aufnehmen.

  9. 9
    HerausforderungLies beide Signale

    Ein 8-Bit-Addierer addiert 1111 0110 und 0001 0100 und erzeugt 0000 1010 mit Ausgangsübertrag 1. Was sagen die vorzeichenlose und die vorzeichenbehaftete Lesart aus?

    ---reveal---

    Vorzeichenlos läuft 246 + 20 = 266 über und speichert 10. Vorzeichenbehaftet passt −10 + 20 = 10 hinein, daher ist der vorzeichenbehaftete Überlauf 0. Eine Addition unterschiedlicher Vorzeichen kann den vorzeichenbehafteten Wertebereich nicht überschreiten, auch wenn diese Bitrechnung einen Ausgangsübertrag hat.

  10. 10
    VerbindungDas Programm entscheidet über die Reaktion

    RISC-V add liefert niederwertige Bits ohne Flags oder Überlauf-Trap zurück. Eine vorzeichenlose Prüfung kann die Summe mit einer Eingabe vergleichen; ein kleineres Ergebnis signalisiert einen Umbruch. Eine vorzeichenbehaftete Prüfung muss stattdessen vorzeichenbehaftete Beziehungen verwenden.

    Auch Sprachregeln sind wichtig. Vorzeichenlose Addition in C bricht um, während vorzeichenbehafteter Überlauf undefiniert ist. Java-Ganzzahladdition bricht um, und Python-Ganzzahlen wachsen. Das korrekte Verfolgen der Bits allein klärt das Verhalten auf Sprachebene nicht.

  11. 11
    HerausforderungVerbinde Subtraktion mit dem vorzeichenbehafteten Wertebereich

    Eine 8-Bit-ALU berechnet 100 − (−35). Welcher gespeicherte vorzeichenbehaftete Wert entsteht, und bei welcher Interpretation muss ein Überlauf gemeldet werden?

    ---reveal---

    Das exakte vorzeichenbehaftete Ergebnis ist 135, dessen niederwertige acht Bits 1000 0111 sind und als −121 interpretiert werden. Die vorzeichenbehaftete Subtraktion läuft über, weil die Eingaben unterschiedliche Vorzeichen haben und das Vorzeichen des Ergebnisses von dem von 100 abweicht. Wird das zweite Muster stattdessen als vorzeichenloser Wert 221 gelesen, ergibt sich 100 − 221, wofür ein vorzeichenloser Borgübertrag nötig ist.

  12. 12
    ZusammenfassungWähle nach der Bitverfolgung eine Bereichsprüfung

    Addition und Subtraktion nutzen dieselben Volladdierer; Invertierung und anfänglicher Übertrag wählen die Subtraktion. Erweitere vor der Operation jede Eingabe entsprechend ihrer Bedeutung.

    Prüfe anschließend bei vorzeichenlosen Werten Übertrag oder Borgübertrag und bei vorzeichenbehafteten Werten den Überlauf. Wende dann die Prozessor- und Sprachregeln an. Die Sättigungsarithmetik trifft eine andere Entscheidung: Sie begrenzt ein Ergebnis außerhalb des Wertebereichs auf einen Endpunkt, statt umgebrochene niederwertige Bits zu behalten.

2

Baue eine ALU, die korrekt vergleicht

14 Schritte
Wähle arithmetische und logische Ergebnisse, korrigiere den vorzeichenbehafteten Kleiner-als-Vergleich nach Überlauf und verkürze den Übertragspfad.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungMehrere Ergebnisse, ein gewählter Ausgang
  2. 2
    ErklärungWiederhole einen 1-Bit-Slice
  3. 3
    BeispielDekodiere die Steuersignale eines Entwurfs
  4. 4
    HerausforderungBaue NOR aus denselben Gattern
  5. 5
    VerbindungVerschiebe um gewählte Abstände
  6. 6
    ErklärungReduziere das Ergebnis auf Zero
  7. 7
    BeispielErkenne ein irreführendes Differenzvorzeichen
  8. 8
    HerausforderungInterpretiere dieselben Muster zweimal
  9. 9
    ErklärungBeschreibe einen Übertrag, bevor er eintrifft
  10. 10
    BeispielSage den abschließenden Übertrag eines Blocks voraus
  11. 11
    HerausforderungEin erzeugter Übertrag trifft auf einen Stopp
  12. 12
    KernaussageSetze Gatter ein, um die Wartezeit zu verkürzen
  13. 13
    HerausforderungHalte den Vergleich nach einem schnelleren Addierer korrekt
  14. 14
    ZusammenfassungUnterscheide Auswahl, Interpretation und Geschwindigkeit
3

Verfolge ein Produkt und einen Quotienten durch die Hardware

18 Schritte
Verfolge vorzeichenlose Multiplikation, Booth-Rekodierung und restaurierende Division und wende anschließend Vorzeichenregeln und Breitenprüfungen an.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungProdukte kombinieren Zeilen; Quotienten entstehen durch Entscheidungen
  2. 2
    BeispielWähle Teilprodukte für 9 mal 6
  3. 3
    BeispielVervollständige die gewählten Beiträge
  4. 4
    KernaussageErhalte den Übertrag des kompakten Multiplizierers
  5. 5
    HerausforderungPrüfe ein schmales vorzeichenloses Produkt
  6. 6
    ErklärungHalte den Betrag einer vorzeichenbehafteten Zahl in vorzeichenlosen Bits
  7. 7
    ErklärungRichte das Booth-Register ein
  8. 8
    BeispielFühre die ersten beiden Booth-Schritte aus
  9. 9
    BeispielStelle das vorzeichenbehaftete Produkt fertig
  10. 10
    HerausforderungPrüfe nach der Multiplikation den vorzeichenbehafteten Wertebereich
  11. 11
    VerbindungKomprimiere Zeilen, statt jede Summe fertigzustellen
  12. 12
    BeispielHole die ersten Dividendenbits herunter
  13. 13
    BeispielVervollständige Quotient und Rest
  14. 14
    HerausforderungWende die vorzeichenbehaftete Restregel an
  15. 15
    TippVerwende den Borgübertrag für die Probesubtraktion
  16. 16
    HerausforderungVerbinde eine Divisionsabkürzung mit Multiplikation
  17. 17
    VerbindungLies besondere RISC-V-Ergebnisse
  18. 18
    ZusammenfassungPrüfe die Invariante und das Ziel
4

Dekodiere Gleitkommabits vor dem Rechnen

12 Schritte
Kodiere einen normalen Wert, stelle den Zusammenhang zwischen Abstand und Genauigkeit her und ordne Nullwerte, subnormale Zahlen, Unendlichkeitswerte und NaNs ein.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungEine Größenordnung und eine begrenzte Anzahl von Stellen
  2. 2
    BeispielNormalisiere den Betrag
  3. 3
    BeispielAddiere den Bias und setze die Felder zusammen
  4. 4
    HerausforderungDekodiere einen neuen normalen Wert
  5. 5
    ErklärungDer Wertebereich garantiert keine genaue Darstellung ganzer Zahlen
  6. 6
    ErklärungOrdne reservierte Exponenten zuerst ein
  7. 7
    BeispielDekodiere eine subnormale Zahl ohne implizite 1
  8. 8
    KernaussageEin winziges exaktes Ergebnis benötigt kein Unterlauf-Flag
  9. 9
    HerausforderungUnterscheide Unendlich von einem ungültigen Ergebnis
  10. 10
    TippPrüfe auf NaN ohne Gleichheitsvergleich
  11. 11
    HerausforderungVerbinde Kodierung mit graduellem Unterlauf
  12. 12
    ZusammenfassungInterpretiere Felder, bevor du einen Wert berechnest
5

Gleiche Exponenten an, runde und erkläre Genauigkeitsverlust

18 Schritte
Verfolge Gleitkommaoperationen, nutze Informationen aus Schutz-, Rundungs- und Sticky-Bit und sage Absorption, Auslöschung und Umwandlungsfehler voraus.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungErhalte Informationen bis zur Rundungsentscheidung
  2. 2
    BeispielGleiche die Exponenten für eine Addition an
  3. 3
    BeispielNormalisiere, bevor du den Nachbarwert wählst
  4. 4
    ErklärungMultipliziere mit einer Bias-Korrektur
  5. 5
    HerausforderungKorrigiere eine Exponentenberechnung
  6. 6
    ErklärungEin gerades beibehaltenes Bit löst einen Gleichstand auf
  7. 7
    BeispielVerfolge Schutz-, Rundungs- und Sticky-Bit
  8. 8
    HerausforderungUnterscheide einen Gleichstand von einem benachbarten Wert
  9. 9
    VerbindungDie Rundungsrichtung verändert negative Ergebnisse
  10. 10
    KernaussageFMA erhält ein Produkt bis nach der Addition
  11. 11
    ErklärungEine Dezimaleingabe kann bereits gerundet ankommen
  12. 12
    BeispielEin Zähler erreicht eine Abstandsschranke
  13. 13
    HerausforderungSage eine veränderte Gruppierung voraus
  14. 14
    KernaussageExakte Subtraktion kann einen früheren Fehler sichtbar machen
  15. 15
    TippWähle eine Toleranz, die nahe null funktioniert
  16. 16
    HerausforderungPrüfe eine Ganzzahl nach Hin- und Rückumwandlung
  17. 17
    HerausforderungKombiniere Exponentenangleichung, Sticky-Bit und Absorption
  18. 18
    ZusammenfassungLokalisiere den Informationsverlust

Rechnerarithmetik: Übungsaufgaben

60 Übungsfragen in 6 Sets

Set 1: Übertragsnetzwerke und Produktbildung10 Übungsfragen

Frage 1 von 10

Wie lauten bei ODER-Weiterleitung das Übertragserzeugungs- und das Übertragsweiterleitungssignal für die Operandenbits 1 und 1?
  1. Erzeugung 1, Weiterleitung 0
  2. Erzeugung 1, Weiterleitung 1
  3. Erzeugung 0, Weiterleitung 1
  4. Erzeugung 0, Weiterleitung 0
Antwort zeigenAntwort ausblenden
Antwort: B
Das Erzeugungssignal ist das UND der Operanden und daher 1; dieser Entwurf definiert das Weiterleitungssignal als ODER der Operanden, ebenfalls 1. Das Weiterleitungssignal 0 gehörte zu einer XOR-Weiterleitung; beide Konventionen können eine korrekte Übertragslogik unterstützen, aber die Frage legt die ODER-Version fest.

Frage 2 von 10

Wie viele Bits kann das vollständige vorzeichenlose Produkt eines 7-Bit-Operanden und eines 9-Bit-Operanden benötigen?
  1. 9 Bit
  2. 15 Bit
  3. 18 Bit
  4. 16 Bit
Antwort zeigenAntwort ausblenden
Antwort: D
Das vollständige Produkt kann die Summe der Operandenbreiten benötigen, also 7 + 9 = 16 Bit. Werden nur die neun Bit des breiteren Operanden verwendet, gehen möglicherweise signifikante Produktbits verloren; die Multiplikation kann eine größere Breite als beide Eingaben benötigen, selbst wenn jede Eingabe einzeln hineinpasst.

Frage 3 von 10

Welches vollständige 8-Bit-Produkt und welches beibehaltene niederwertige 4-Bit-Ergebnis entstehen bei vorzeichenlos 11 × 3?
  1. Vollständig 0010 0001; niederwertig 0001
  2. Vollständig 0001 0001; niederwertig 0001
  3. Vollständig 0010 0001; niederwertig 0010
  4. Vollständig 0001 1110; niederwertig 1110
Antwort zeigenAntwort ausblenden
Antwort: A
Das exakte Produkt ist 33, kodiert als 0010 0001; das Behalten von vier Bit lässt 0001, also 1. Die höherwertige Hälfte 0010 ist nicht das beibehaltene Ergebnis, und ihr Wert ungleich null belegt, dass beim Verkürzen Information verloren geht, obwohl das niederwertige Muster wie eine gültige kleine Ganzzahl aussieht.

Frage 4 von 10

Ein 4-Bit-Block hat das Gruppenübertragserzeugungssignal 0 und das Gruppenübertragsweiterleitungssignal 1. Welcher Ausgangsübertrag ergibt sich für Eingangsübertrag 0 und für Eingangsübertrag 1?
  1. 1 bei Eingangsübertrag 0; 1 bei Eingangsübertrag 1
  2. 0 bei Eingangsübertrag 0; 0 bei Eingangsübertrag 1
  3. 0 bei Eingangsübertrag 0; 1 bei Eingangsübertrag 1
  4. 1 bei Eingangsübertrag 0; 0 bei Eingangsübertrag 1
Antwort zeigenAntwort ausblenden
Antwort: C
Der Blockübertrag ist G ODER (P UND Eingangsübertrag), bei G = 0 und P = 1 entspricht er also dem Eingangsübertrag. Ein Ausgang, der immer 1 ist, würde voraussetzen, dass der Block einen Übertrag erzeugt; die Weiterleitung allein kann aus einer Eingabe null keinen Übertrag erzeugen.

Frage 5 von 10

Was macht eine Carry-Save-Stufe mit drei Teilproduktwörtern?
  1. Sie erzeugt ein Wort mit vollständiger Übertragskette
  2. Sie erzeugt zwei Wörter nach vollständiger Übertragskette
  3. Sie erzeugt drei Wörter ohne vollständige Übertragskette
  4. Sie erzeugt zwei Wörter ohne vollständige Übertragskette
Antwort zeigenAntwort ausblenden
Antwort: D
Eine Carry-Save-Stufe erhält die Gesamtsumme in einem Summenwort und einem Übertragswort und reduziert drei Zeilen auf zwei, ohne den Übertrag über die gesamte Breite weiterzuleiten. Sie stellt keine einzelne gewöhnliche Summe fertig; ein späterer Addierer mit Übertragsweiterleitung kombiniert nach der Zeilenkomprimierung die letzten beiden Wörter.

Frage 6 von 10

Bei einer 32-Bit-Bereichsprüfung ist der Index −2 und die nicht negative Länge im vorzeichenbehafteten Wertebereich ist 20. Was meldet ein vorzeichenloser Vergleich von Index ≥ Länge?
  1. Falsch, daher wird der Index akzeptiert
  2. Wahr, daher wird der Index zurückgewiesen
  3. Wahr, da vorzeichenbehaftet −2 größer als 20 ist
  4. Falsch, da −2 auf null begrenzt wird
Antwort zeigenAntwort ausblenden
Antwort: B
Die vorzeichenlose Neuinterpretation von −2 ergibt 4.294.967.294, was 20 überschreitet, daher weist die Prüfung den Index zurück. Der Vergleich begrenzt negative Werte nicht auf null; er liest ihre Zweierkomplementmuster als große positive vorzeichenlose Werte, weshalb diese kombinierte Bereichsprüfung funktioniert.

Frage 7 von 10

Eine RV32-Routine benötigt das vollständige Produkt eines vorzeichenlosen Operanden mit einem weiteren vorzeichenlosen Operanden. Welche Ergebnisse muss sie kombinieren?
  1. mulh als höherwertige Hälfte und mul als niederwertige Hälfte
  2. mul als höherwertige Hälfte und mulhu als niederwertige Hälfte
  3. mulhu als höherwertige Hälfte und mul als niederwertige Hälfte
  4. mulhsu als höherwertige Hälfte und mulh als niederwertige Hälfte
Antwort zeigenAntwort ausblenden
Antwort: C
Beide Operanden sind vorzeichenlos, daher liefert mulhu die höherwertigen 32 Bits und mul die niederwertigen 32 Bits. mulh würde beide Operanden als vorzeichenbehaftet interpretieren und kann bei gesetztem höchstwertigem Bit eine andere höherwertige Hälfte liefern; der Befehl für die niederwertige Hälfte allein kann das vollständige 64-Bit-Produkt nicht wiederherstellen.

Frage 8 von 10

Ein 4-Bit-Block mit Übertragsvorausberechnung und ODER-Weiterleitung addiert a = 1001 und b = 0111 mit anfänglichem Übertrag 0. Wie lauten Gruppenübertragserzeugungssignal, Gruppenübertragsweiterleitungssignal und abschließender Übertrag?
  1. G = 1, P = 1, Übertrag = 1
  2. G = 0, P = 1, Übertrag = 0
  3. G = 1, P = 0, Übertrag = 1
  4. G = 0, P = 1, Übertrag = 1
Antwort zeigenAntwort ausblenden
Antwort: A
Bit 0 erzeugt einen Übertrag, und jede Position hat mindestens einen Eingang mit dem Wert 1, sodass der Übertrag durch den Block weitergeleitet wird. Daher sind G und P beide 1 und der abschließende Übertrag ist 1; G auf 0 zu setzen würde den Übertrag übersehen, der innerhalb des Blocks statt an seinem Eingang entsteht.

Frage 9 von 10

Ein 4-Bit-Multiplizierer erhält die Muster 1110 und 0011. Welche höherwertigen Hälften ergeben sich bei vorzeichenbehafteter und vorzeichenloser Multiplikation, und passt eines der Produkte in seinen jeweiligen 4-Bit-Wertebereich?
  1. Vorzeichenbehaftet oben 1111, passt nicht; vorzeichenlos oben 0010, passt
  2. Vorzeichenbehaftet oben 1111, passt; vorzeichenlos oben 0010, passt nicht
  3. Vorzeichenbehaftet oben 0000, passt; vorzeichenlos oben 0010, passt nicht
  4. Vorzeichenbehaftet oben 1111, passt; vorzeichenlos oben 0000, passt
Antwort zeigenAntwort ausblenden
Antwort: B
Vorzeichenbehaftet ist −2 × 3 gleich −6, das vollständige Muster ist 1111 1010; dessen höherwertige Hälfte ist die Vorzeichenerweiterung der niederwertigen Hälfte und das Ergebnis passt hinein. Vorzeichenlos ist 14 × 3 gleich 42, 0010 1010, dessen höherwertige Hälfte ungleich null ist; beide niederwertigen Hälften stimmen überein, aber ihre unterschiedlichen Prüfungen verhindern die Annahme, dass beide gleichermaßen verkürzt werden können.

Frage 10 von 10

Eine vorzeichenbehaftete Subtraktion mit Überlauf hat das gespeicherte Vorzeichenbit 0. Welches Ergebnis soll die ALU für den vorzeichenbehafteten Kleiner-als-Vergleich liefern?
  1. 0
  2. Das Ausgangsübertragsbit
  3. Der Zero-Ausgang
  4. 1
Antwort zeigenAntwort ausblenden
Antwort: D
Die korrigierte Entscheidung ist Vorzeichen XOR Überlauf, hier 0 XOR 1 = 1. Der erste vorzeichenbehaftete Operand ist also kleiner. Würde nur das gespeicherte Vorzeichen gelesen, ergäbe sich 0; der Überlauf bedeutet, dass das umgebrochene Vorzeichen gegenüber der tatsächlichen mathematischen Differenz umgekehrt ist. Deshalb ist die Korrektur nötig.
Set 2: Ganzzahlsummen, Subtraktion und ALU-Entscheidungen10 Übungsfragen

Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.

Frage 1 von 10

Ein Volladdierer erhält die Operandenbits 1 und 0 mit Eingangsübertrag 1. Welches Summenbit und welchen Ausgangsübertrag erzeugt er?
  1. Summe 1, Übertrag 0
  2. Summe 1, Übertrag 1
  3. Summe 0, Übertrag 1
  4. Summe 0, Übertrag 0
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

Ein 8-Bit-Subtrahierer invertiert den zweiten Operanden, lässt aber versehentlich den anfänglichen Eingangsübertrag auf 0. Welches vorzeichenbehaftete Ergebnis erzeugt er für 42 − 17?
  1. 24
  2. 25
  3. 26
  4. −25
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

Wie lauten Ausgangsübertrag und vorzeichenbehafteter Überlauf bei der 8-Bit-Addition 118 + 19?
  1. Übertrag 1, Überlauf 0
  2. Übertrag 0, Überlauf 0
  3. Übertrag 1, Überlauf 1
  4. Übertrag 0, Überlauf 1
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 4 von 10

Welche ALU-Komponente wählt ein Ergebnis aus den möglichen UND-, ODER- und Addiererausgängen?
  1. Die Übertragskette
  2. Der Ausgangsmultiplexer
  3. Die Vorzeichenerweiterungsschaltung
  4. Das Operandenregister
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 5 von 10

Welches 8-Bit-Muster erhält den Wert des vorzeichenbehafteten 4-Bit-Operanden 1101?
  1. 0000 1101
  2. 1111 1101
  3. 1000 1101
  4. 0000 0011
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 6 von 10

Welche Ergebnisse in voller Breite liefern das vorzeichenbehaftete slt und das vorzeichenlose sltu für die 4-Bit-Eingaben a = 0101 und b = 1010?
  1. slt: 0001; sltu: 0000
  2. slt: 0001; sltu: 0001
  3. slt: 0000; sltu: 0000
  4. slt: 0000; sltu: 0001
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 7 von 10

Was liefert die vorzeichenlose 8-Bit-Sättigungsaddition für 220 + 70?
  1. 255
  2. 34
  3. 254
  4. 290
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 8 von 10

Ein 64-Bit-Barrel-Shifter verwendet Verschiebungsstufen für Zweierpotenzen. Welche Stufen werden für eine Verschiebung um 37 gewählt?
  1. 32, 4 und 2
  2. 16, 8, 4 und 1
  3. 32, 4 und 1
  4. 32, 8 und 1
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 9 von 10

Eine umbrechende 8-Bit-Routine berechnet (115 + 29) − 40 und verwendet dann das vorzeichenbehaftete Endergebnis. Welches Ergebnis und welche Überläufe ergeben sich?
  1. 104; beide Operationen laufen vorzeichenbehaftet über
  2. 104; nur die Addition läuft vorzeichenbehaftet über
  3. −152; nur die Subtraktion läuft vorzeichenbehaftet über
  4. −112; keine Operation läuft vorzeichenbehaftet über
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

Eine 8-Bit-ALU subtrahiert zwei identische Muster 1001 0110. Wie lauten ihr Ergebnis und ihr Zero-Ausgang?
  1. Ergebnis 0000 0000, Zero 0
  2. Ergebnis 1111 1111, Zero 0
  3. Ergebnis 0000 0000, Zero 1
  4. Ergebnis 0000 0001, Zero 0
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Set 3: Vorzeichenbehaftete Produkte, Division und Rechenabkürzungen10 Übungsfragen

Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.

Frage 1 von 10

Welche Größe bestimmt das Vorzeichen eines Rests ungleich null bei vorzeichenbehafteter Division mit Abschneiden?
  1. Der Divisor
  2. Der Quotient
  3. Der Operand mit dem kleineren Betrag
  4. Der Dividend
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

Welchen Quotienten und Rest liefert die vorzeichenbehaftete RISC-V-Division für 23 dividiert durch −6?
  1. Quotient −4, Rest −1
  2. Quotient −3, Rest 5
  3. Quotient −3, Rest −5
  4. Quotient 3, Rest 5
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

In einem Booth-Schritt gilt A = 0, Multiplikand = −7 und das niederwertige Bitpaar ist 10. Welcher Akkumulatorwert wird vor dem Verschieben benötigt?
  1. −7
  2. 0
  3. +7
  4. −1
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 4 von 10

Die Addition in der höherwertigen Hälfte eines kompakten vorzeichenlosen Multiplizierers erzeugt Übertrag 1. Wohin muss dieser Übertrag bei der nächsten kombinierten Rechtsverschiebung gelangen?
  1. In die höchstwertige Position der höherwertigen Hälfte
  2. In die niederwertigste Position des Multiplikators
  3. In den niederwertigen Eingangsübertrag des nächsten Schritts
  4. Vollständig außerhalb des gespeicherten Produkts
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 5 von 10

Eine RV32-Routine berechnet q = div(a, b), r = rem(a, b) und anschließend q × b + r mit umbrechender Arithmetik. Was geschieht für a = −2³¹ und b = −1?
  1. q = −2³¹, r = 0; die Rückrechnung ergibt 2³¹ − 1
  2. q = 2³¹ − 1, r = −1; die Rückrechnung ergibt −2³¹
  3. q = −2³¹, r = 0; die Rückrechnung ergibt −2³¹
  4. q = 2³¹, r = 0; die Rückrechnung ergibt −2³¹
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 6 von 10

Ein restaurierender Dividierer mit vier Bit hat vor einer Probesubtraktion den Teilrest 2 und den Divisor 11. Welches Probemuster und welche Aktion sind erforderlich?
  1. Probe 0111; behalten und 1 schreiben
  2. Probe 1001; restaurieren und 0 schreiben
  3. Probe 1001; behalten und 1 schreiben
  4. Probe 0111; restaurieren und 0 schreiben
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 7 von 10

Eine 4-Bit-Booth-Implementierung verwendet für den Multiplikanden −8 und den Multiplikator 1 einen 5-Bit-Akkumulator. Wie lauten die erste Aktualisierung des Akkumulators und das abschließende 8-Bit-Produkt?
  1. Zuerst −8 (11000); Produkt 1111 1000
  2. Zuerst +8 (01000); Produkt 1111 1000
  3. Zuerst +8 (01000); Produkt 0000 1000
  4. Zuerst −8 (11000); Produkt 0000 1000
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 8 von 10

Eine vorzeichenbehaftete Routine ersetzt die Division von −29 durch 8 mit Abschneiden durch eine Rechtsverschiebung. Welcher Korrekturwert und welches verschobene Ergebnis erhalten den Quotienten?
  1. 7 addieren, dann zu −3 verschieben
  2. 0 addieren, dann zu −4 verschieben
  3. 3 addieren, dann zu −4 verschieben
  4. 8 addieren, dann zu −2 verschieben
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 9 von 10

Ein Multiplizierer mit Pipeline hat eine Latenz von vier Zyklen und nimmt in jedem Zyklus eine neue Multiplikation an. Wann kann eine zweite unabhängige Multiplikation nach Beginn der ersten starten?
  1. Vier Zyklen später
  2. Drei Zyklen später
  3. Zwei Zyklen später
  4. Einen Zyklus später
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

Welcher Schiebe-Addier-Ausdruck entspricht 12x, wenn alle Zwischenergebnisse darstellbar sind und die Sprache die Verschiebungen erlaubt?
  1. (x << 3) + (x << 2)
  2. (x << 3) + (x << 1)
  3. (x << 4) + (x << 2)
  4. (x << 3) + x
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Set 4: Gleitkommafelder und Sonderwerte10 Übungsfragen

Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.

Frage 1 von 10

Welchen tatsächlichen Exponenten kodiert ein normales binary32-Exponentenfeld mit dem Wert 123?
  1. −4
  2. 4
  3. −3
  4. 123
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

Was stellt ein binary32-Muster mit einem Exponenten aus lauter Einsen und einer Mantisse ungleich null dar?
  1. Eine subnormale Zahl
  2. Einen Unendlichkeitswert
  3. NaN
  4. Einen normalen Wert
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

Ein normaler binary32-Wert hat das Vorzeichen 1, das Exponentenfeld 125 und die Mantisse 101, gefolgt von Nullen. Welchen Wert hat er?
  1. −0,15625
  2. −0,40625
  3. −1,625
  4. −0,8125
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 4 von 10

Welches binary32-Vorzeichen, Exponentenfeld und welcher Mantissenanfang kodieren −10,5?
  1. Vorzeichen 1; Exponent 130; Mantisse 10101…
  2. Vorzeichen 1; Exponent 124; Mantisse 0101…
  3. Vorzeichen 0; Exponent 130; Mantisse 0101…
  4. Vorzeichen 1; Exponent 130; Mantisse 0101…
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 5 von 10

Welchen Wert hat das positive subnormale binary32-Muster 0x00000008?
  1. 2⁻¹⁴⁹
  2. 2⁻¹⁴⁷
  3. 2⁻¹⁴⁶
  4. 2⁻¹²⁶
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 6 von 10

Zwei positive normale Gleitkommasignifikanden ergeben multipliziert 11,01₂ bei einem anfänglichen tatsächlichen Exponenten von 4. Welches normalisierte Produkt entsteht vor dem Runden?
  1. 1,101₂ × 2⁵
  2. 1,101₂ × 2³
  3. 1,101₂ × 2⁴
  4. 1,010₂ × 2⁵
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 7 von 10

Zwei positive normale binary32-Werte sind 2⁻⁸⁰ und 2⁻⁶⁰. Ihr exaktes Produkt ist in binary32 darstellbar. Welche Ergebnisklasse und welches Unterlauf-Flag entstehen bei der Standardbehandlung?
  1. Subnormal; Unterlauf gesetzt
  2. Normal; Unterlauf nicht gesetzt
  3. Null; Unterlauf gesetzt
  4. Subnormal; Unterlauf nicht gesetzt
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 8 von 10

Ein binary32-Ergebnis wird bei Standardbehandlung als (−6,0)/(−0,0) berechnet und dann auf Gleichheit mit sich selbst geprüft. Welcher Wert, welches neu gesetzte Flag und welches Gleichheitsergebnis entstehen?
  1. −∞; Division durch null; wahr
  2. +∞; Division durch null; wahr
  3. +∞; ungültige Operation; falsch
  4. NaN; ungültige Operation; falsch
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 9 von 10

Ein binary32-Format wird durch eines mit demselben Exponentenfeld, aber zwei Mantissenbits weniger ersetzt. Wie ändert sich der Abstand bei Beträgen von 2¹⁰ bis unter 2¹¹?
  1. Von 2⁻¹³ zu 2⁻¹⁵
  2. Von 2⁻¹⁰ zu 2⁻⁸
  3. Von 2⁻¹³ zu 2⁻¹¹
  4. Von 2⁻¹³ zu 2⁻¹²
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

Welche RISC-V-Befehlskategorie schreibt ihr Ergebnis in ein Ganzzahlregister, obwohl sie Gleitkommaeingaben vergleicht?
  1. Gleitkommaadditionen wie fadd.s
  2. Gleitkommavergleiche wie flt.s
  3. Gleitkommaprodukte wie fmul.s
  4. Verschmolzene Multiplikationen und Additionen wie fmadd.s
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Set 5: Rundungsentscheidungen und Genauigkeitsverlust10 Übungsfragen

Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.

Frage 1 von 10

Ein exakter Gleichstand bei einem Signifikanden mit vier Bit liegt zwischen 1,110₂ und 1,111₂. Was wählt die Rundung zur geraden Endziffer bei Gleichstand?
  1. 1,111₂
  2. 1,101₂
  3. 1,110₂
  4. 10,000₂
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

Ein normalisiertes Ergebnis behält den Signifikanden 1,011₂ mit Schutz-/Rundungs-/Sticky-Bits 100. Wie lautet der Signifikand nach Rundung zur geraden Endziffer bei Gleichstand?
  1. 1,011₂
  2. 1,100₂
  3. 1,010₂
  4. 1,101₂
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

Was ergibt 2,75 + 0,375 bei Signifikanden mit vier Bit und Rundung zur geraden Endziffer bei Gleichstand?
  1. 3,125
  2. 3,25
  3. 2,75
  4. 3,0
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 4 von 10

Welcher gekürzte Bruch hat eine exakte endliche Binärentwicklung: 7/16, 7/20, 7/12 oder 7/10?
  1. 7/16
  2. 7/20
  3. 7/12
  4. 7/10
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 5 von 10

Ein normalisiertes Ergebnis mit einem Signifikanden von vier Bit hat die exakten Bits 1,111101₂ beim tatsächlichen Exponenten 5. Welches normalisierte Ergebnis wird bei Rundung zur geraden Endziffer bei Gleichstand gespeichert?
  1. 1,111₂ × 2⁵
  2. 1,000₂ × 2⁶
  3. 1,000₂ × 2⁵
  4. 1,111₂ × 2⁶
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 6 von 10

In binary32 ist ein gespeicherter Akkumulator bei Rundung zur geraden Endziffer bei Gleichstand gleich 2²⁶. Eine Schleife addiert den gespeicherten Wert 3 genau viermal und rundet nach jeder Addition. Welcher Endwert entsteht?
  1. 2²⁶ + 8
  2. 2²⁶ + 12
  3. 2²⁶
  4. 2²⁶ + 16
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 7 von 10

In binary32-Arithmetik mit Rundung zur geraden Endziffer bei Gleichstand seien a = 1 + 2⁻¹², b = 1 − 2⁻¹², c = −1. Was liefern getrennte Berechnung von a × b + c und verschmolzene Multiplikation und Addition?
  1. Beide liefern −2⁻²⁴
  2. Getrennt ergibt 0; verschmolzen ergibt −2⁻²⁴
  3. Getrennt ergibt −2⁻²⁴; verschmolzen ergibt 0
  4. Beide liefern 0
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 8 von 10

Ein positiver endlicher binary32-Wert läuft bei Multiplikation mit 2 über. Welches Ergebnis und welche Flags entstehen bei roundTowardNegative unter Standardbehandlung?
  1. Positiv unendlich; Überlauf und Ungenauigkeit
  2. Größter endlicher positiver Wert; Unterlauf und Ungenauigkeit
  3. Positiv unendlich; Division durch null und Ungenauigkeit
  4. Größter endlicher positiver Wert; Überlauf und Ungenauigkeit
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 9 von 10

In binary32-Arithmetik mit Rundung zur geraden Endziffer bei Gleichstand wird x = 1 + 2⁻²³ exakt gespeichert. Ein Programm berechnet (x − 1) × 2²³. Welches Ergebnis entsteht, und verursacht die Subtraktion einen Fehler?
  1. 1; die Subtraktion ist exakt
  2. 0; die Subtraktion lässt 2⁻²³ fallen
  3. 1; die Subtraktion rundet auf
  4. 2; die Subtraktion ergibt 2⁻²²
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

Ein exakter negativer Wert −2,3 wird auf eine ganze Zahl gerundet. Wie lauten die Ergebnisse in Richtung null und in Richtung minus unendlich?
  1. In Richtung null −3; in Richtung negativ −2
  2. In Richtung null −2; in Richtung negativ −2
  3. In Richtung null −2; in Richtung negativ −3
  4. In Richtung null −3; in Richtung negativ −3
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Set 6: Analysiere Arithmetik im Datenpfad10 Übungsfragen

Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.

Frage 1 von 10

Eine Gleitkommaberechnung liefert NaN. Welche Art von Prüfung sollte ein Programm verwenden, um es zu erkennen?
  1. Gleichheit mit einer gespeicherten NaN-Konstante
  2. Einen speziellen NaN-Test wie isnan
  3. Eine Prüfung, ob der Wert gleich sich selbst ist
  4. Eine Prüfung, ob das Vorzeichenbit gleich 1 ist
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

Eine 8-Bit-ALU subtrahiert b = 0111 1000 von a = 1000 1010. Welche vorzeichenbehafteten und vorzeichenlosen Kleiner-als-Ergebnisse und welcher Zero-Ausgang folgen?
  1. Vorzeichenbehaftet 0; vorzeichenlos 0; Zero 0
  2. Vorzeichenbehaftet 1; vorzeichenlos 1; Zero 0
  3. Vorzeichenbehaftet 0; vorzeichenlos 1; Zero 1
  4. Vorzeichenbehaftet 1; vorzeichenlos 0; Zero 0
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

Ein 4-Bit-Block mit ODER-Weiterleitung addiert 1010 und 0101 mit Eingangsübertrag 1. Das niederwertigste Bit seines zweiten Operanden ändert sich von 1 zu 0. Was geschieht mit dem abschließenden Übertrag und der Summe?
  1. Übertrag bleibt 1; Summe ändert sich von 0000 zu 1111
  2. Übertrag ändert sich von 1 zu 0; Summe von 1111 zu 0000
  3. Übertrag ändert sich von 1 zu 0; Summe von 0000 zu 1111
  4. Übertrag bleibt 0; Summe ändert sich von 0000 zu 1111
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 4 von 10

Ein Programm multipliziert die vorzeichenlosen 8-Bit-Muster 0xFE und 0x02. Es nimmt das höherwertige Byte aus ihrem vorzeichenbehafteten Produkt und das niederwertige Byte aus ihrem vorzeichenlosen Produkt. Welcher 16-Bit-Wert wird zusammengesetzt?
  1. 0xFFFC statt 0x01FC
  2. 0x01FC statt 0xFFFC
  3. 0xFF02 statt 0x01FC
  4. 0x00FC statt 0x01FC
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 5 von 10

Eine RV32-Routine berechnet divu und remu für Dividend 37 und Divisor 0 und prüft dann mit umbrechender Arithmetik, ob q × Divisor + Rest gleich 37 ist. Was stellt die Prüfung fest?
  1. Sie schlägt fehl, weil der Quotient aus lauter Einsen besteht
  2. Sie löst einen Trap aus, bevor die Gleichheit geprüft werden kann
  3. Sie ist erfüllt, weil der Quotient null ist
  4. Sie ist erfüllt, obwohl durch null dividiert wurde
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 6 von 10

Wie groß ist im normalen binary32-Intervall von 64 bis unter 128 der Abstand zwischen benachbarten Werten?
  1. 2⁻¹⁶
  2. 2⁻¹⁷
  3. 2⁻²³
  4. 2⁻¹⁸
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 7 von 10

In binary32-Arithmetik mit Rundung zur geraden Endziffer bei Gleichstand sind a = 1 + 2⁻²², b = 1 − 2⁻²² und c = −1 exakte Eingaben. Was liefern getrennte Multiplikation und Addition sowie FMA?
  1. Getrennt 0; FMA −2⁻⁴⁴
  2. Getrennt −2⁻⁴⁴; FMA −2⁻⁴⁴
  3. Getrennt 0; FMA +2⁻⁴⁴
  4. Getrennt −2⁻²²; FMA −2⁻⁴⁴
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 8 von 10

Ein Modell mit Signifikanden von vier Bit rundet jede Operation zur geraden Endziffer bei Gleichstand. Es berechnet (16 + 1,25) − 16. Welches Ergebnis wird zurückgegeben?
  1. 0
  2. 1,25
  3. 2
  4. 1
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 9 von 10

Eine breite Ganzzahl 67.108.867 wird bei Rundung zur geraden Endziffer bei Gleichstand in binary32 und zurück in eine breite Ganzzahl umgewandelt. Das Programm subtrahiert anschließend die ursprüngliche Ganzzahl. Welche Differenz entsteht?
  1. +5
  2. −3
  3. 0
  4. −1
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

Nach einer vorzeichenlosen RV32-Addition ist die gespeicherte Summe in vorzeichenloser Reihenfolge kleiner als die erste Eingabe. Welche Schlussfolgerung folgt daraus?
  1. Die Addition ist zwingend vorzeichenbehaftet übergelaufen
  2. Die Addition hat weder Übertrag noch Überlauf
  3. Die erste Eingabe war zwingend negativ
  4. Die Addition ist über den vorzeichenlosen Höchstwert hinaus umgebrochen
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Hängst du bei deiner eigenen Aufgabe fest? Hausaufgabenhilfe

Schlüsselbegriffe

78 Schlüsselbegriffe, jeweils mit Definition

A

Absolute Toleranz
Eine absolute Toleranz legt einen vom Betrag unabhängigen Fehlerspielraum fest, der nützlich ist, wenn näherungsweise endliche Werte nahe null liegen.
Eine absolute Untergrenze verhindert, dass ein Vergleich nahe null nur von einem gegen null gehenden relativen Spielraum abhängt.
Absorption
Absorption tritt auf, wenn die Addition eines kleinen Werts einen größeren Gleitkommaoperanden unverändert lässt, weil die Rundung den Beitrag entfernt.
Ein binary32-Zähler bei 2²⁴ kann aufhören zu wachsen, wenn das Programm wiederholt 1 addiert.
Akkumulator
Ein Akkumulator hält ein laufendes arithmetisches Ergebnis; der Booth-Algorithmus verwendet für n-Bit-Operanden einen n + 1-Bit-Akkumulator.
Das zusätzliche Akkumulatorbit ermöglicht es, einen kleinsten negativen Multiplikanden ohne Überlauf zu subtrahieren.
Arithmetisch-logische Einheit
Eine arithmetisch-logische Einheit ist eine kombinatorische Datenpfadschaltung, die aus Operanden und Steuereingaben arithmetische oder logische Ergebnisse auswählt.
Eine Änderung der Operationssteuersignale lässt dasselbe Paar von Registerausgängen eine Addition oder ein bitweises UND speisen.
Arithmetische Rechtsverschiebung
Eine arithmetische Rechtsverschiebung bewegt Bits zu niederwertigeren Positionen und kopiert dabei das Vorzeichenbit der Eingabe in neu frei werdende höherwertige Positionen.
Die vorzeichenbehaftete Zahl −10 um eine Stelle nach rechts verschoben ergibt −5; −9 auf dieselbe Weise verschoben ergibt ebenfalls −5.
Auslöschung
Auslöschung entfernt gemeinsame führende Stellen bei der Subtraktion nahezu gleicher Werte und macht frühere Operandenfehler im Verhältnis zur Differenz groß.
Eine exakte Subtraktion kann trotzdem ein relativ ungenaues Ergebnis sichtbar machen, wenn ihre beiden Eingaben bereits gerundet waren.

B

Barrel-Shifter
Ein Barrel-Shifter kombiniert Verschiebungsstufen für Zweierpotenzen, um ein Wort durch eine feste Anzahl von Logikstufen um einen gewählten Abstand zu verschieben.
Ein 32-Bit-Barrel-Shifter wählt die Stufen für 16 und 4 Stellen, um eine Verschiebung um 20 zu erzeugen.
Bereichsprüfung
Eine Bereichsprüfung prüft, ob ein Index zum gültigen Bereich eines Arrays gehört, bevor dieser Index für den Zugriff auf ein Element verwendet wird.
Ein vorzeichenloser Vergleich mit einer nicht negativen Länge im vorzeichenbehafteten Wertebereich weist sowohl negative als auch zu große Indizes zurück.
bfloat16
bfloat16 ist ein 16-Bit-Gleitkommaformat mit einem Vorzeichenbit, acht Exponentenbits und sieben Mantissenbits, das den Wertebereich stärker als die Genauigkeit gewichtet.
Seine Exponentenbreite entspricht der von binary32, während seine kürzere Mantisse deutlich weniger Details erhält.
Bitslice
Ein Bitslice ist der Teil einer wiederholten Datenpfadschaltung, der eine Operandenbitposition und ihre lokalen Signale verarbeitet.
Der höchstwertige Slice liefert Überlaufinformationen, während jeder dazwischenliegende Slice einen Übertrag weitergibt.
Bnegate
Bnegate ist ein gemeinsames Steuersignal in einer ALU aus Slices, das den zweiten Operanden invertiert und den anfänglichen Eingangsübertrag für die Subtraktion setzt.
Das Setzen von Bnegate bei gewähltem Addierer ändert a + b zu a + NICHT(b) + 1.
Booth-Rekodierung
Die Booth-Rekodierung ersetzt Folgen binärer Multiplikatorbits durch vorzeichenbehaftete Beiträge und ermöglicht so Multiplikation durch Additionen und Subtraktionen.
Ein Multiplikator mit einer langen Folge von Bits mit dem Wert 1 kann als eine Zweierpotenz minus eine andere Zweierpotenz dargestellt werden.
Booth-Rekodierung zur Basis 4
Die Booth-Rekodierung zur Basis 4 behandelt zwei Multiplikatorbits pro Schritt mit vorzeichenbehafteten Ziffern von −2 bis +2, um die Anzahl der Teilprodukte zu verringern.
Ein Multiplizierer zur Basis 4 benötigt weniger Teilproduktzeilen als ein Entwurf, der eine Zeile pro Multiplikatorbit erzeugt.
Borgübertrag
Ein Borgübertrag zeigt an, dass eine vorzeichenlose Subtraktion eine Einheit einer höheren Stelle benötigt, weil der erste Operand kleiner als der zweite ist.
Die Subtraktion von vorzeichenlos 12 von 5 benötigt einen Borgübertrag, obwohl die Schaltung weiterhin ein Muster mit fester Breite zurückgibt.

C

Carry-Save-Addierer
Ein Carry-Save-Addierer komprimiert drei Eingabewörter zu einem Summenwort und einem Übertragswort, ohne Überträge über die volle Breite weiterzuleiten.
Mehrere Carry-Save-Ebenen reduzieren Teilproduktzeilen vor einer abschließenden Addition mit Übertragsweiterleitung.
Carry-Select-Addierer
Ein Carry-Select-Addierer berechnet einen Block für beide möglichen Eingangsüberträge und wählt ein vorausberechnetes Ergebnis, wenn der Übertrag eintrifft.
Die Verdopplung der Arithmetik des oberen Blocks tauscht mehr Schaltungsfläche gegen eine kürzere Wartezeit auf den unteren Block.

D

Darstellungsfehler
Ein Darstellungsfehler ist die Differenz zwischen einem beabsichtigten Wert und seiner gespeicherten Näherung, wenn das Format ihn nicht exakt darstellen kann.
Der Dezimalwert 0,1 hat eine periodische Binärentwicklung und muss in binary32 angenähert werden.
Dividend
Ein Dividend ist der Wert, der dividiert wird; er ist gleich Quotient mal Divisor plus Rest.
Bei −17 dividiert durch 5 mit Abschneiden ist der Dividend −17, der Quotient −3 und der Rest −2.
Divisor
Ein Divisor ist der Wert, durch den ein Dividend dividiert wird; bei gewöhnlicher Ganzzahldivision muss er ungleich null sein.
Die Division von 29 durch 6 lässt einen Rest, der kleiner als der positive Divisor 6 ist.

E

Einheit der letzten Stelle
Eine Einheit der letzten Stelle, kurz ulp, ist der Abstand, der bei einer gewählten Größenordnung zur niederwertigsten beibehaltenen Stelle gehört.
Im binary32-Intervall von 16 bis 32 haben benachbarte normale Werte den Abstand 2⁻¹⁹.
Exponentenangleichung
Die Exponentenangleichung verschiebt einen Signifikanden mit kleinerem Exponenten nach rechts, sodass Gleitkommaoperanden vor Addition oder Subtraktion den größeren Exponenten gemeinsam haben.
Die Angleichung der Exponenten 6 und 2 verschiebt den zweiten Signifikanden um vier Stellen nach rechts.
Exponentenbias
Ein Exponentenbias ist ein fester Versatz, der zum tatsächlichen Exponenten einer normalen Zahl addiert wird, bevor er als vorzeichenloses Feld gespeichert wird.
Ein tatsächlicher binary32-Exponent von 5 wird als 132 gespeichert, weil der Bias des Formats 127 beträgt.

G

Genauigkeit
Die Genauigkeit ist die Anzahl signifikanter Stellen, die in einem Zahlenformat verfügbar sind, und begrenzt die Detailauflösung bei einer bestimmten Größenordnung.
Eine Erhöhung des Exponenten kann den binary32-Abstand vergrößern, obwohl seine Genauigkeit von 24 Bit unverändert bleibt.
Gerichtete Rundung
Die gerichtete Rundung wählt einen darstellbaren Nachbarwert in einer angegebenen Richtung: in Richtung positiv unendlich, negativ unendlich oder null.
Für ein negatives ungenaues Ergebnis können Rundung in Richtung null und Rundung in Richtung negativ unterschiedliche Nachbarwerte wählen.
Gleitkommaregister
Ein Gleitkommaregister hält einen Operanden oder ein Ergebnis für Gleitkommabefehle; RISC-V F und D verwenden die Register f0 bis f31.
Ein Gleitkommavergleich schreibt sein Ergebnis 0 oder 1 in ein Ganzzahlregister statt in diesen Registersatz.
Gradueller Unterlauf
Der graduelle Unterlauf stellt winzige Werte durch subnormale Zahlen mit abnehmender signifikanter Genauigkeit dar, statt sie sofort durch null zu ersetzen.
Die exakte Hälfte des kleinsten normalen binary32-Werts bleibt als subnormale Zahl ungleich null erhalten.
Gruppenübertragserzeugungssignal
Ein Gruppenübertragserzeugungssignal zeigt an, dass ein Bitblock unabhängig vom Eingangsübertrag des Blocks einen Ausgangsübertrag erzeugt.
Ein höherwertiges Bit, das einen Übertrag erzeugt, lässt den Block einen Übertrag erzeugen, selbst wenn sein niederwertigstes Bit Eingangsüberträge stoppt.
Gruppenübertragsweiterleitungssignal
Ein Gruppenübertragsweiterleitungssignal zeigt an, dass jede Position eines Blocks einen Eingangsübertrag bis zum Ausgang des Blocks weiterleiten kann.
Vier ODER-Weiterleitungsbits müssen alle 1 sein, damit das Gruppenweiterleitungssignal eines Blocks mit vier Bit 1 ist.

H

Höherwertige Produkthälfte
Die höherwertige Produkthälfte enthält die höherwertigen n Bits eines vollständigen 2n-Bit-Produkts zweier n-Bit-Operanden.
Eine höherwertige Hälfte ungleich null zeigt, dass ein vorzeichenloses Produkt Informationen verliert, wenn es in nur n Bits gespeichert wird.

I

Implizites Bit
Das implizite Bit ist die führende 1 eines normalen binären Signifikanden, die das Format ergänzt, ohne sie zu speichern.
binary32 erhält 24 Bit normale Genauigkeit aus einem 23-Bit-Mantissenfeld und seiner impliziten führenden 1.

K

Kleiner-als-Vergleich
Der Kleiner-als-Vergleich erzeugt die Ganzzahl 1 in voller Breite, wenn ein angegebener Operandenvergleich wahr ist, und andernfalls die Ganzzahl 0.
RISC-V slt vergleicht vorzeichenbehaftete Operanden, während sltu dieselben Muster vorzeichenlos ordnet.
Korrekte Rundung
Die korrekte Rundung gibt das Ergebnis der exakten mathematischen Operation zurück, gerundet entsprechend dem Zielformat und der gewählten Rundungsrichtung.
Konforme Grundrechenoperationen stimmen bei identischen Eingaben, identischem Zielformat und identischer Rundungsrichtung numerisch überein.

M

Mantissenfeld
Das Mantissenfeld speichert die Signifikandbits nach dem Binärkomma und lässt das führende Bit bei normalen Werten implizit.
Ein normaler Signifikand von 1,01₂ speichert eine Mantisse, die mit 01 beginnt, gefolgt von Nullen zum Füllen des Felds.
Maschinenepsilon
Das Maschinenepsilon bezeichnet üblicherweise den Abstand zwischen 1 und dem nächstgrößeren darstellbaren Wert; für binary32 ist er 2⁻²³.
Der Abstand direkt über 1 ist doppelt so groß wie die übliche relative binary32-Schranke von 2⁻²⁴ bei Rundung zur nächsten Zahl.
Modulare Arithmetik
Die modulare Arithmetik behält den Rest nach Division durch einen festen Modul; umbrechende n-Bit-Arithmetik verwendet den Modul 2ⁿ.
Vorzeichenlos mit 8 Bit ergibt 250 + 20 den Wert 14, weil sich 270 und 14 um einen vollständigen Modul von 256 unterscheiden.
Multiplexer
Ein Multiplexer wählt anhand von Steuerbits eines von mehreren möglichen Eingangssignalen aus und leitet es an einen Ausgang weiter.
Ein ALU-Ausgangsmultiplexer kann ein UND-Ergebnis wählen, während der Addierer gleichzeitig eine Summe berechnet.
Multiplikand
Ein Multiplikand ist der Operand, dessen verschobene Kopien Teilprodukte bilden, die durch die Bits des Multiplikators ausgewählt werden.
Bei der Schiebe-Addier-Multiplikation von 9 mit 5 tragen verschobene Kopien von 9 bei den Multiplikatorbits 0 und 2 bei.
Multiplikationslatenz
Die Multiplikationslatenz ist die Zeit vom Start einer Multiplikation bis zur Verfügbarkeit ihres Ergebnisses für eine abhängige Operation.
Ein Multiplizierer mit Pipeline kann in jedem Zyklus ein neues Produkt annehmen, selbst wenn die Latenz mehrere Zyklen beträgt.
Multiplikator
Ein Multiplikator ist der Operand, dessen Bits in einem binären Multiplikationsalgorithmus verschobene Beiträge des Multiplikanden auswählen.
Das Multiplikatormuster 1001 wählt eine unverschobene Kopie und eine um drei Stellen nach links verschobene Kopie.

N

NaN
Ein NaN ist ein ungeordneter Gleitkomma-Sonderwert, der ein undefiniertes numerisches Ergebnis darstellt und mit einer Mantisse ungleich null und einem Exponenten aus lauter Einsen kodiert wird.
Null dividiert durch null ergibt NaN, und der Gleichheitsvergleich dieses Ergebnisses mit sich selbst liefert falsch.
Nichtassoziativität
Nichtassoziativität bedeutet, dass eine Änderung der Gruppierung einer Operation ihr Ergebnis ändern kann; bei Gleitkommaaddition entsteht sie durch zwischenzeitliches Runden.
Eine parallele Summe kann ihre letzten Bits ändern, wenn eine andere Threadanzahl die Gruppierung der Reduktion verändert.
Nichtrestaurierende Division
Die nichtrestaurierende Division übernimmt einen negativen Teilrest in den nächsten Schritt und korrigiert ihn durch die nächste Addition oder eine abschließende Rückaddition.
Ein negativer abschließender Teilrest muss um den Divisor erhöht werden, um den endgültigen Rest zu erhalten.
Normalisierung
Die Normalisierung verschiebt einen Signifikanden ungleich null in die erforderliche Form mit führender Ziffer und ändert den Exponenten, um seinen Wert zu erhalten.
Eine Summe mit dem Signifikanden 10,1₂ wird einmal nach rechts verschoben, während ihr Exponent um eins steigt.
Nullerweiterung
Die Nullerweiterung verbreitert ein vorzeichenloses Muster, indem sie Nullen in seine neuen höherwertigen Positionen einfügt, ohne seinen numerischen Wert zu ändern.
Ein vorzeichenloses Byte mit dem Wert 250 wird bei Erweiterung auf 16 Bit zu 0000 0000 1111 1010.

Q

Quotient
Ein Quotient ist das Divisionsergebnis vor Berücksichtigung des Rests; die vorzeichenbehaftete Ganzzahldivision mit Abschneiden rundet ihn in Richtung null.
Für −19 dividiert durch 4 ergibt Abschneiden den Quotienten −4, während Abrunden −5 ergäbe.

R

Relative Toleranz
Eine relative Toleranz legt einen akzeptablen Vergleichsfehler proportional zu den Beträgen der verglichenen endlichen Werte fest.
Eine feste relative Toleranz erlaubt bei Werten nahe einer Million eine größere absolute Differenz als bei Werten nahe eins.
Rest
Ein Rest ist der Wert, der nach Subtraktion von Quotient mal Divisor vom Dividenden gemäß der gewählten Divisionskonvention verbleibt.
RISC-V rem liefert −2 für −17 dividiert durch 5, weil der Rest ungleich null dem Vorzeichen des Dividenden folgt.
Restaurierende Division
Die restaurierende Division versucht eine Subtraktion des Divisors und macht sie bei Fehlschlag rückgängig; dabei erzeugt sie pro Schritt ein Quotientenbit.
Benötigt eine Probesubtraktion einen Borgübertrag, addiert die Hardware den Divisor zurück und hält das Quotientenbit 0 fest.
Ripple-Carry-Addierer
Ein Ripple-Carry-Addierer verkettet Volladdierer so, dass jeder Ausgangsübertrag den Eingangsübertrag des nächsthöherwertigen Bits liefert.
Ein bei Bit 0 erzeugter Übertrag muss möglicherweise viele Slices durchlaufen, bevor das höchstwertige Ergebnisbit feststeht.
Rundung zur nächsten Zahl mit gerader Endziffer bei Gleichstand
Die Rundung zur nächsten Zahl mit gerader Endziffer bei Gleichstand wählt den nächsten darstellbaren Wert und bei einem exakten Gleichstand einen beibehaltenen Signifikanden, der auf 0 endet.
Bei einem Gleichstand zwischen ganzen Zahlen wird 6,5 nach dieser Regel zu 6 und 7,5 zu 8 gerundet.
Rundungsbit
Das Rundungsbit ist das zweite zusätzliche Bit nach dem beibehaltenen Signifikanden und trägt Informationen über den verworfenen Rest bei.
Schutzbit 1 und Rundungsbit 1 zeigen einen Wert über der Hälfte an, selbst bevor das Sticky-Bit geprüft wird.

S

Sättigungsarithmetik
Die Sättigungsarithmetik begrenzt ein Ergebnis außerhalb des Wertebereichs auf den größten oder kleinsten von seinem Zielformat unterstützten Wert.
Die vorzeichenlose 8-Bit-Sättigungsaddition 240 + 30 liefert 255 und verhindert, dass ein heller Pixelwert zu einem dunklen umbricht.
Schiebe-Addier-Multiplikation
Die Schiebe-Addier-Multiplikation untersucht Multiplikatorbits sequenziell und summiert die entsprechenden verschobenen Multiplikandenwerte.
Ein sequenzieller Multiplizierer mit sechs Bit führt sechs Bitschritte aus, selbst wenn die meisten Multiplikatorbits null sind.
Schutzbit
Das Schutzbit ist das erste zusätzliche Bit nach dem beibehaltenen Signifikanden und hilft, Werte unter, bei oder über der Hälfte zu unterscheiden.
Ein Schutzbit von 0 bedeutet nach der Normalisierung, dass der verworfene Teil unter einer halben ulp liegt.
Signifikand
Ein Signifikand enthält die signifikanten Binärziffern eines Gleitkommawerts, bei normalen Werten einschließlich des impliziten führenden Bits.
Der normale Wert 1,101₂ × 2³ hat den Signifikanden 1,101₂ und den tatsächlichen Exponenten 3.
SRT-Division
Die SRT-Division wählt Quotientenziffern anhand führender Divisor- und Teilrestbits aus und ermöglicht so mehrere Quotientenbits pro Schritt.
Ein falscher Eintrag in der Auswahltabelle kann einen Quotienten trotz ansonsten korrekter arithmetischer Hardware verfälschen.
Statusflag
Ein Statusflag ist ein Prozessorstatusbit, das eine Eigenschaft einer abgeschlossenen Operation zur späteren Prüfung durch einen anderen Befehl festhält.
Ein bedingter Sprung kann nach einer Addition das Overflow-Flag von x86 prüfen, um ein vorzeichenbehaftetes Ergebnis außerhalb des Wertebereichs zu erkennen.
Sticky-Bit
Das Sticky-Bit ist die ODER-Verknüpfung aller verworfenen Bits nach Schutz- und Rundungsbit und hält fest, ob in diesem Rest irgendein Bit ungleich null vorhanden ist.
Schutzbit 1, Rundungsbit 0 und Sticky-Bit 1 bedeuten über der Hälfte, sodass es falsch wäre, das Ergebnis als Gleichstand zu behandeln.
Subnormale Zahl
Eine subnormale Zahl ist ein Gleitkommawert ungleich null mit Exponentenfeld null, einer führenden Signifikandziffer 0 und der kleinsten normalen Größenordnung.
Das binary32-Muster 0x00000002 stellt das Doppelte der kleinsten positiven subnormalen Zahl dar.
Subtraktion im Zweierkomplement
Die Subtraktion im Zweierkomplement addiert den invertierten zweiten Operanden und einen anfänglichen Übertrag von 1 zum ersten Operanden.
Derselbe 8-Bit-Addierer kann durch Änderung seiner Invertierungs- und Übertragssteuerung 19 + 6 oder 19 − 6 berechnen.

T

Teilprodukt
Ein Teilprodukt ist ein verschobener Beitrag zu einem Multiplikationsergebnis, der durch ein Multiplikatorbit oder eine rekodierte Ziffer ausgewählt wird.
Bei vorzeichenloser Binärmultiplikation ist jedes gewöhnliche Teilprodukt entweder ein verschobener Multiplikand oder null.
Trap
Ein Trap überträgt die Steuerung an Code zur Ausnahmebehandlung, wenn ein Befehl eine Bedingung auslöst, die besondere Verarbeitung erfordert.
Eine MIPS-Addition mit Trap überträgt die Steuerung, wenn ihr vorzeichenbehaftetes Ergebnis den Wertebereich des Registers überschreitet.

Ü

Überlauf bei vorzeichenbehafteter Arithmetik
Ein Überlauf bei vorzeichenbehafteter Arithmetik tritt auf, wenn das exakte Ergebnis außerhalb des Zweierkomplementbereichs des Zielformats liegt, unabhängig vom Ausgangsübertrag.
Eine positive 8-Bit-Summe, die zu einem negativen gespeicherten Muster wird, kann einen vorzeichenbehafteten Überlauf anzeigen.
Überlauf bei vorzeichenloser Arithmetik
Ein Überlauf bei vorzeichenloser Arithmetik tritt auf, wenn ein exaktes Ergebnis außerhalb des Bereichs von null bis zum größten bei der Zielbreite darstellbaren Wert liegt.
Eine vorzeichenlose 8-Bit-Summe aus 230 und 40 speichert 14, während der Ausgangsübertrag meldet, dass 270 nicht hineinpasste.
Überlaufkorrigiertes Vorzeichen
Das überlaufkorrigierte Vorzeichen ist das Vorzeichen des Subtraktionsergebnisses XOR der vorzeichenbehaftete Überlauf und liefert die korrekte vorzeichenbehaftete Kleiner-als-Entscheidung.
Eine umgebrochene tatsächlich positive Differenz kann negativ erscheinen, bis das Überlaufbit den Vergleich korrigiert.
Übertragserzeugungssignal
Ein Übertragserzeugungssignal zeigt an, dass eine Bitposition unabhängig von ihrem Eingangsübertrag einen Übertrag erzeugt, weil beide Operandenbits 1 sind.
Ist das Erzeugungssignal 1, ist der nächste Übertrag 1, selbst wenn keine niederwertige Position einen Eingangsübertrag lieferte.
Übertragsvorausberechnung
Die Übertragsvorausberechnung berechnet Überträge aus Erzeugungs- und Weiterleitungsausdrücken und verringert so die sequenzielle Übertragsabhängigkeit eines Ripple-Carry-Addierers.
Eine Vorausberechnungseinheit kann den Ausgangsübertrag eines Blocks berechnen, bevor jeder interne Übertrag durchgelaufen ist.
Übertragsweiterleitungssignal
Ein Übertragsweiterleitungssignal beschreibt, ob ein Eingangsübertrag eine Bitposition passieren kann; dieser Entwurf verwendet das ODER der Operanden.
Bei den Eingaben 1 und 0 ist das Weiterleitungssignal 1 und das Erzeugungssignal 0, sodass der Eingangsübertrag den Ausgangsübertrag bestimmt.

U

Unendlich
Unendlich ist ein vorzeichenbehafteter Gleitkomma-Sonderwert, der mit einem Exponenten aus lauter Einsen und Mantisse null kodiert wird.
Positiv unendlich plus ein endlicher Wert bleibt positiv unendlich, während unendlich minus sich selbst NaN ergibt.
Ungenauigkeitsausnahme
Die Ungenauigkeitsausnahme hält fest, dass ein gelieferter Gleitkommawert wegen Rundung vom exakten mathematischen Ergebnis abweicht.
Ein gerundeter Wert kann bei einer gewöhnlichen Rechnung Ungenauigkeit setzen, ohne einen Überlauf oder eine ungültige Operation zu erzeugen.
Unterlaufausnahme
Die Unterlaufausnahme setzt bei Standardbehandlung sowohl ein sehr kleines Ergebnis als auch Ungenauigkeit voraus, sodass ein exaktes subnormales Ergebnis sie nicht auslöst.
Die Division des kleinsten normalen binary32-Werts durch 2 erzeugt ein exaktes subnormales Ergebnis ohne Unterlauf.

V

Verschmolzene Multiplikation und Addition
Eine verschmolzene Multiplikation und Addition berechnet ein Produkt plus einen Summanden mit einer abschließenden Rundung und erhält dabei die Zwischengenauigkeit des Produkts.
FMA kann eine kleine Differenz erhalten, die verloren geht, wenn ein Produkt vor der Addition eines entgegengesetzten Summanden gerundet wird.
Volladdierer
Ein Volladdierer kombiniert zwei Operandenbits und einen Eingangsübertrag und erzeugt ein Summenbit und einen Ausgangsübertrag für die nächste Position.
Bei drei Eingängen mit dem Wert 1 gibt der Volladdierer Summe 1 und Übertrag 1 aus, was den Binärwert 11 darstellt.
Vorzeichenbehaftete Null
Eine vorzeichenbehaftete Null ist ein Gleitkommanullwert mit positivem oder negativem Vorzeichenbit; beide sind beim Vergleich gleich, aber einige Vorzeichenwirkungen bleiben erhalten.
Positiv 1 dividiert durch negative Null ergibt bei Standardbehandlung von Gleitkommaoperationen negativ unendlich.
Vorzeichenerweiterung
Die Vorzeichenerweiterung verbreitert ein Muster im Zweierkomplement, indem sie sein Vorzeichenbit in die neuen höherwertigen Positionen kopiert und seinen Wert erhält.
Die Erweiterung des vorzeichenbehafteten 1010 zu 1111 1010 erhält −6; das Einfügen von Nullen würde positiv 10 ergeben.
Vorzeichenloser Vergleich
Ein vorzeichenloser Vergleich ordnet Muster als nicht negative Binärwerte, sodass ein gesetztes führendes Bit einen positiven Stellenwert beiträgt.
Das Muster 1111 ist vorzeichenlos größer als 0001, obwohl ihre vorzeichenbehafteten Werte −1 und 1 sind.

W

Wallace-Baum
Ein Wallace-Baum reduziert Teilproduktzeilen durch Ebenen von Carry-Save-Komprimierung, bevor eine abschließende Addition das Produkt erzeugt.
Parallele Zeilenreduktion verkürzt den Pfad gegenüber der Addition eines vollständigen Teilprodukts nach dem anderen.

Z

Zero-Ausgang
Der Zero-Ausgang ist ein ALU-Statussignal, das nur dann 1 ist, wenn jedes Ergebnisbit null ist; meist wird es durch eine NOR-Reduktion gebildet.
Die Subtraktion gleicher Operandenmuster setzt Zero, selbst wenn diese Muster negative vorzeichenbehaftete Werte darstellen.

Über diese Einheit

Von StudeliFehler melden

Erstelle deine eigenen Lernmaterialien

Mach aus deinen Notizen, Folien und Dokumenten Lernleitfäden, Übungsfragen, Karteikarten und 6 weitere Tools.

Jetzt starten