Warum verwendet die Gleitkommadarstellung ein Vorzeichenbit anstelle des Zweierkomplements, um negative Zahlen anzuzeigen?


20

Stellen Sie sich eine Festkommadarstellung vor, die als entarteter Fall einer Gleitkommazahl betrachtet werden kann. Es ist durchaus möglich, das Zweierkomplement für negative Zahlen zu verwenden. Aber warum ist ein Vorzeichenbit für Gleitkommazahlen notwendig, sollten Mantissenbits nicht Zweierkomplemente verwenden?

Warum verwenden die Exponentenbits auch eine Vorspannung anstelle einer Darstellung mit Vorzeichen (ähnlich den Mantissenbits) oder einer Zweierkomplementdarstellung?

Update: Entschuldigung, wenn ich es nicht klargestellt habe. Ich habe nach dem Grund gesucht, wie die Gleitkommadarstellung geformt ist. Wenn es keinen starken Kompromiss zwischen den Alternativen bei der Implementierung gibt, kann dann jemand die historischen Aspekte der Gleitkommadarstellung erklären?

Antworten:


7

Das Zweierkomplement ist sinnvoll, wenn die beiden fraglichen Entitäten die gleichen "Einheiten" und die gleiche "Breite" haben. Mit Breite meine ich, wenn Sie beispielsweise eine N-Bit-Nummer und eine M-Bit-Nummer addieren, wobei N und M unterschiedlich sind, sollten Sie besser nicht das Zweierkomplement verwenden. Bei Gleitkommazahlen haben wir das Problem der Einheiten: Wenn die Exponenten unterschiedlich sind, verschieben wir mental eine der Mantissen, und jetzt haben wir das gleiche Problem wie zuvor (mit der Breite).

Bei den Exponentenbits erhalten wir durch die Verwendung eines Bias anstelle von Vorzeichen + Betrag einen weiteren Wert (ansonsten hätten wir +0 und -0). Hier ist das Zweierkomplement sinnvoll, wenn Sie Zahlen multiplizieren oder dividieren (seitdem addieren oder subtrahieren wir die Exponenten), aber nicht so sinnvoll, wenn Sie addieren oder subtrahieren.

Bearbeiten: Ein Kommentator bemerkte, dass Sie mithilfe der Vorzeichenerweiterung Zweierkomplement-Ganzzahlen unterschiedlicher Länge hinzufügen können. Es gibt auch ein Problem beim Erkennen eines Überlaufs, das kann aber auch behoben werden. Zusammenfassend könnte man wahrscheinlich das Zweierkomplement verwenden, wenn man vorsichtig genug ist. (Sie müssen auch Multiplikation und Division behandeln.)


4
"Wenn Sie eine N-Bit-Nummer und eine M-Bit-Nummer hinzufügen, bei denen N und M unterschiedlich sind, sollten Sie besser nicht das Zweierkomplement verwenden." Ich glaube, dass es durchaus möglich ist, eine Zahl unter Verwendung einer Zweierkomplementdarstellung unter Verwendung ihres MSB zu verlängern, z. Sollte es nicht einfach sein, dies innerhalb einer Gleitkomma-Arithmetik-Logik zu dem existierenden Barrel-Shifter hinzuzufügen?
koo

Vielen Dank für Ihre Antwort! Ich habe die Frage bearbeitet, damit klarer gefragt wird, was den aktuellen Gleitkommawert ausmacht.
Koo

4

Aus Wikipedia:

Das Zweierkomplementsystem hat den Vorteil, dass die Grundrechenarten Addition, Subtraktion und Multiplikation mit denen für vorzeichenlose Binärzahlen identisch sind ...

Das Zweierkomplement ist eine Darstellung negativer Zahlen, die einfach sehr praktisch ist. Das ist der ganze Grund, es überhaupt zu benutzen.

Ein Mantisse-Exponent-Paar ist eine Darstellung einer Gleitkommazahl. Wenn Sie Gleitkommazahlen verwenden, arithmetieren Sie meistens nicht nur auf der Mantisse oder auf dem Exponenten.


4

Aber warum ist ein Vorzeichenbit für Gleitkommazahlen notwendig?

Falsche Annahme. Das ist nicht nötig. Ich bin mir ziemlich sicher, dass ich Gleitkommaformate getroffen habe, bei denen das 2er-Komplement für die Mantisse verwendet wurde, aber ich müsste nach Namen suchen.

Ich bin weit davon entfernt, ein Spezialist für numerische Analysen zu sein, aber ich verstehe, dass es für sie wichtig ist, eine Null zu haben. Es ist wahrscheinlich einfacher zu manipulieren als die Ergänzung. Das war wahrscheinlich ein Kriterium bei der Wahl für IEEE-754.

Auch warum verwenden die Exponentenbits eine Vorspannung anstelle einer Darstellung mit Vorzeichen

Wieder ist es etwas, das nicht benötigt wird und einige haben es anders gemacht.

Es ist die Darstellung, für die es einfacher ist, eine Hardware-Implementierung für die Gruppe von Operationen durchzuführen, die an Exponenten ausgeführt werden (und hier ist eine Darstellung für -0 nicht erwünscht).

Eine der Konsequenzen dieser Wahl ist, dass Sie einen vorzeichenbehafteten Ganzzahlvergleich verwenden können, um die FP-Nummer zu vergleichen, wenn Sie sich nicht für NaN interessieren. Dies war möglicherweise ein Kriterium für einige (die Tatsache, dass NaN eine spezielle Behandlung erfordert, lässt mich bezweifeln, dass dies nicht der Fall ist für IEEE-754).


Vorzeichenbehaftete Ganzzahlvergleiche ordnen negative FP-Zahlen rückwärts. Damit sie richtig rangieren können, wäre eine Art Komplementformat erforderlich gewesen, wobei das Komplement wahrscheinlich das beste ist (negativ wäre ... 110.1111 ..., mit unendlich vielen links und rechts).
Supercat

3
MIL-STD-1750A ist wahrscheinlich die am häufigsten verwendete Prozessorarchitektur, die eine Gleitkommadarstellung mit Zweierkomplement angibt. In Abschnitt 4.1: "Der Befehlssatz muss 16-Bit-Festkomma-Einzelgenauigkeits-, 32-Bit-Festkomma-Doppelgenauigkeits-, 32-Bit-Gleitkomma- und 48-Bit-Gleitkomma-Daten mit erweiterter Genauigkeit in Zweierkomplementdarstellung unterstützen. " .
Njuffa

2

IEEE 754 verwendet Vorzeichen / Größe, nicht Zweierkomplement oder Einerkomplement.

Zweierkomplement hat den Nachteil, dass der positive und der negative Bereich nicht identisch sind. Wenn alle Bitmuster gültig sind, haben Sie Zahlen x, bei denen Sie -x nicht einfach berechnen können. Das ist schlecht. Die Alternative ist, dass es ungültige Bitmuster gibt, was ebenfalls schlecht ist. In IEEE 754 gibt es keine ungültigen Bitmuster für 64- oder 32-Bit-Gleitkommazahlen, sodass Sie sich darüber keine Gedanken machen müssen.

Das eine Komplement würde das Multiplizieren / Dividieren komplexer machen (bei vorzeichenbehafteter Größe werden nur die Zeichen xor und die Mantisse als vorzeichenlose Zahl behandelt). Beim Addieren und Subtrahieren möchte ich wirklich nicht über das Addieren und Subtrahieren in der eigenen Ergänzung nachdenken, da es meinen Kopf verletzt.


Der erste Absatz dieser Antwort legt nahe, dass das Vorzeichen / die Größe keine Nachteile aufweist. Das Vorzeichen / die Größe hat +/- 0 und eine kompliziertere Arithmetik als das Zweierkomplement.
Praxeolitic

+/- Null ist sowohl ein Problem als auch ein Merkmal. Wenn Sie beispielsweise eine winzige Zahl x durch 10 ^ 100 dividieren, erhalten Sie +0 oder -0, wobei das Vorzeichen von x erhalten bleibt.
gnasher729

1

Das Vorzeichnen von Nullen erhöht die Aussagekraft, die bei numerischen Berechnungen nützlich sein kann. Auf der Wikipedia-Seite ' Signed zero ' heißt es:

Es wird behauptet, dass die Einbeziehung der vorzeichenbehafteten Null in IEEE 754 das Erreichen der numerischen Genauigkeit bei einigen kritischen Problemen , insbesondere beim Rechnen mit komplexen Elementarfunktionen, wesentlich erleichtert .

WH Kahan, einer der Hauptentwickler von IEEE 754-Gleitkommazahlen, ist aus diesen Gründen ein Befürworter der vorzeichenbehafteten Null. Seine Meinung dürfte viel Gewicht gehabt haben.


1

Ich denke, es ist wichtig zu verstehen, dass Gleitkommaberechnungen ungefähre und keine exakten Werte liefern. Das heißt, wenn eine Gleitkommaberechnung einen codierten Wert X ergibt, dann repräsentiert dies a theoretisch idealen Wert dar, der mit ziemlicher Sicherheit NICHT X ist, sondern im Bereich [X .. X + e) ​​{wobei 'e' das 'ist. machine epsilon ', dh es gibt keine Gleitkommazahl zwischen X und X + e}. Insbesondere stellt eine Gleitkommazahl Null eine ideale Zahl dar, die wahrscheinlich nicht genau Null ist, aber zu klein ist, um sie mit einem von Null verschiedenen Gleitkomma-codierten Wert darzustellen.

Angesichts der Tatsache, dass die Darstellung von Vorzeichen und Größe eine Möglichkeit darstellt, der Codierung zu ermöglichen, sich genau zu "erinnern", auf welcher Seite von Null sich der ideale Wert befindet, auf der positiven oder der negativen. Dies ist bei bestimmten komplexen (im Sinne von "a + bi") Berechnungen von entscheidender Bedeutung. Komplexe -> komplexe Funktionen sind häufig "mehrwertig". Daher ist es für eine ordnungsgemäße Berechnung von entscheidender Bedeutung, die Positionen der "Astschnitte" zu berücksichtigen. Vorzeichenlose Nullen markieren dann gewissermaßen die Stellen dieser Verzweigungsschnitte - die Berechnung auf der positiven Seite unterscheidet sich von der auf der negativen Seite.


1
Gleitkommaberechnungen liefern genaue Werte. Sie unterscheiden sich nur geringfügig von den Werten, die mathematische reelle Zahlen erzeugen. Eine Gleitkommazahl steht für eine Zahl und nicht für einen Bereich.
gnasher729

0

Die meisten Gleitkommaformate nutzen die Tatsache, dass in einem Binärsystem jeder Nicht-Null-Wert mit einem Nicht-Minimal-Exponenten eine "1" als höchstwertiges Bit der Mantisse hat. In einem System mit einem 23-Bit-Feld für die Mantisse liegen die Mantissen mit positiven Zahlen also nicht zwischen 0 und 8.388.607, sondern zwischen 8.388.608 und 16.777.215. Die Mantissen der Zahlen, die positiv sein können oder nicht, reichen von -16.777.215 bis -8.388.608 und von +8.388.608 bis +16.777.215. Während Zweierkomplement das beste numerische Format ist, wenn Berechnungen "reibungslos" über Null durchgeführt werden müssen, bedeuten die diskontinuierlichen Bereiche der Mantissenwerte, dass Berechnungen über Null nicht reibungslos funktionieren können, unabhängig davon, ob Zweierkomplement oder etwas anderes verwendet wird .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.