Exponenten einer IEEE754 - Fließkomma-Zahl addieren

Hi
Wir sollen in Informatik 2 nach IEEE754 codierte Fließkommazahlen binär multiplizieren

Soweit eigentlich kein Problem...

Allerdings macht mir das Addieren der Exponenten einige schwierigkeiten:

Formel:
E = Exponent

Ex + Ey - Bias = Ez

Bias = 01111111b
E ist 8 bit groß
Ex = Ey = 10000011b

in Zahlen:
10000011b + 10000011b - 01111111b

Problem 1: Die addition
10000011 + 10000011 = 1|00000110 Überlauf :(

Problem 2: Wie soll ich subrtaieren?? 2-er Komplement ist ja nich möglich, da die prositiven Zahlen bereits alle 8 Bit in anspruch nehmen...
 
Überlauf...

...führt auch bei Darstellungen im IEEE754-Format (oder einem x-beliebigen anderen mit abgeschlossenem Wertebereich) zu nicht mehr gültigem Ergebnis.

DASS Du gegebenenfalls einen Überlauf feststellst, ist schon mal löblich. Dann mußt Du nur noch eine angemessene Reaktion programmieren. Dir ist doch sicherlich sowas wie eine Ausnahme-Meldung gestattet, oder?

Allerdings ergibt sich im konkreten Beispiel nicht tatsächlich ein Überlauf, weil JEDER Exponent zunächst einmal per "Bias" in seinen "normalen" Integer-Wertebereich versetzt werden müßte, WENN Du "normal" mit Integern rechnen willst.
Erst DANN kannst Du die beiden addieren und einen eventuellen Überlauf beurteilen.
ANSCHLIESSEND mußt Du das Ergebnis wieder via "Bias" in die normierte Darstellungsform zurückversetzen.

In Zahlen:

((10000011b - 01111111b) + (10000011b - 01111111b)) + 01111111b

Hier geht es also offenbar darum, 4+4 zusammenzurechnen, was KEINEN Überlauf ergibt, und das Ergebnis dann wieder in die normierte Darstellung 10000111b zurückzubringen.
 
Dann bleibt aber immernoch das Problem, mit der subtraktion...

wie kann ich denn von 10000011b mit einer breite von 8 bit, die 01111111b subtraieren??

Ich muss es nicht programmieren,sondern "nur" schriftlich, binär, auf papier ausrechnen.

Wie mach dass den ein Computer?? nimmt der sich einfach noch ein zusätzliches bit, bzw erweitert er auf 16 bit??
 

OK, in Zahlen:

+ 10000011b
- 01111111b
= 00000100b

GANZ OHNE jeden Überlauf.
Ganz manuell berechenbar.
2 mal hintereinander.

+ 00000100b
+ 00000100b
= 00001000b

Immer noch GANZ OHNE Überlauf.

+ 00001000b
+ 01111111b
= 10000111b

AUCH GANZ OHNE jeden Überlauf.

Ich sehe das Problem offenbar nicht.
Hilf mir auf die Sprünge!
 
Das Problem liegt in dieser rechnung:

+ 10000011b
- 01111111b
= 00000100b

Das subtraieren wird idr durch bilden des 2-komplementes gemach, und dan addiert:

bei 9 Bit:
010000011 +
110000001 (2-Komplement von 001111111)
------------
000000100

Das Problem: Ich habe nur 8 Bit, und die Positiven Zahlen schließen das 8. bit (2^7) mit ein!

Du hast wahrscheinlich im Kopf dezimal gerechnet, und das ergebniss binär hingeschrieben. Das hilft mir in diesem fall nicht wirklich weiter ;) :)

-- edit --
Also, es geht quasi ums schriftliche subtraieren, bzw es genau so zu tun, wie es die CPU macht. (Eine negative Zahl addieren)
 
Integer-Arithmetik...

Hier geht's um abgeschlossene Wertebereiche. Nach DEINER Vorgabe. Bzw. der Deiner Professoren. Richtig?

In diesen Wertebereichen sind Operationen in gewissen GRENZEN KORREKT.
Und bei Überschreitung dieser Grenzen sind sie das nicht mehr.

WAS dabei die GRENZEN der KORREKTHEIT des ERGEBNISSES sind, ist in den seltendsten Fällen identisch mit den Grenzen dessen, was OHNE ÜBERLAUF eines einzelnen Rechenschrittes abläuft.

Soll heißen:

+ 10000011b
- 01111111b

= mit Addition des Komplements des zu subtrahierenden Wertes...

10000011
+ 10000001 (OHNE die führende Eins)

= 00000100 (OHNE den Übertrag: KORREKT im Sinne der Anwendung)

Allein schon die Behauptung, die Subtraktion WÄRE identisch mit der Addition des (Einerkomplements + 1) BEI Berücksichtigung von Überträgen ist Nonsense:

Das TATSÄCHLICH KORREKTE Einerkomplement von

....00000....00000......00000011

MIT Berücksichtigung aller höheren Stellen als den bei Deiner Integer-Arithmetik vorgegebenen Grenzen, ist eine Zahl mit UNENDLICH vielen Einsen in Richtung UNENDLICH hoher Werte!

DAS ist aber kompletter Nonsense.

Und das hat alles nichts mit Kopfrechnen im Dezimalsystem zu tun.
Ganz im Gegenteil: Ich hatte zu meiner Zeit (als es noch nicht mal Taschenrechner gab, die hinreichend billig waren, daß sich jeder sowas leisten konnte) in der Schule mal ne Phase gehabt, da habe ich ALLES einschließlich meine Mathe-Klassenarbeiten im Dualsystem gerechnet (und ich hatte eine Lehrerin (eine FRAU (!)), die das netterweise toleriert hat und mir dadurch zusätzlichen Anschub lieferte...).

Solche Regeln wie die der Bildung des Zweier-Komplements unter Benutzung des Einer-Komplements haben nur DADURCH Gültigkeit, daß man die höheren Stellen einfach als existenzlos voraussetzt.

Die Mathematiker haben dafür extra hochtrabende Begriffe wie "finit" und "Ring" und dergleichen, die mir weniger geläufig sind. Die Regel, daß höhere Stellen einfach wegzulassen sind (damit die von Dir gerade erlernten Regeln überhaupt eine Gültigkeit erlangen können), werden aber nicht erst dadurch wahr, daß man sie mit hochtrabenden Begriffen verziert.
 
Ich habe es so gelernt, dass wenn das MSB = 1 ist, die Zahl generell negativ ist, bzw im (2-er) komplement (bei signed-werten).
Andererseits klingt deine Erläuterung recht logisch.

Das war auf jedenfall in etwa sone Antwort wie ich sie mir vorstellte ;)

Vielen Dank
 
Zurück
Oben