Subtraktion von Gleitkommazahlen

Sebastian R.
Erstie
Erstie
Beiträge: 17
Registriert: 21. Okt 2010 10:12

Subtraktion von Gleitkommazahlen

Beitrag von Sebastian R. » 16. Feb 2011 12:21

Hallo Leute,

ich weiß, dass hier im Forum bereits danach gefragt worden ist. Allerdings habe ich die Unterlagen, die dort angegeben worden sind, nicht ganz verstanden.

Wenn ich zwei Gleitkommazahlen im IEEE 754-Format, die beide positiv sind, addieren möchte, klappt das mit dem in der Vorlesung gezeigten Weg einwandfrei. Ist jedoch eine der Zahlen negativ, erhalte ich immer falsche Ergebnisse.

Hat jemand vielleicht noch ein Seite, wo ich eine Beispielrechnung finden kann?

Herzlichen Dank für die Hilfe im Voraus,

Sebastian

Toa
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 121
Registriert: 16. Feb 2011 23:58

Re: Subtraktion von Gleitkommazahlen

Beitrag von Toa » 17. Feb 2011 00:01

Huhu,

dazu brauchst du keine Referenzrechnung. Du hast bereits das Zweierkompliment kennen gelernt. Das ist hierfür ausreichend. Du wandelst beide Mantissen ins zweier Kompliment um addierst sie.Anschließend interpretierst du das Ergebnis entsprechend und bildest daraus die neue Mantisse :)

Liebe Grüße Toa

Sebastian R.
Erstie
Erstie
Beiträge: 17
Registriert: 21. Okt 2010 10:12

Re: Subtraktion von Gleitkommazahlen

Beitrag von Sebastian R. » 17. Feb 2011 11:34

Hallo Toa,

ja, dass habe ich schon versucht, nur bei mir kommt da nie das richtige heraus :) Naja, ich versuch es nochmal.

Gruß

alex21090
Windoof-User
Windoof-User
Beiträge: 25
Registriert: 14. Okt 2010 20:09

Re: Subtraktion von Gleitkommazahlen

Beitrag von alex21090 » 17. Feb 2011 12:14

Hey,
also wenn ich es richtig verstanden habe dann müsste das so gehen:

Beispiel: a = 0,75 und b = 0,50 wir wollen subtrahieren:

Binärumwandlung: a = 0,11 b = 0,10

Zweierkomplement: a = 10,00 b = 10,01

Addieren:

10,00
10,01
---------------
100,01

rausbekommen sollten wir in der Dezimalschreibweise y = 0,25 und wenn ich mich richtig entsinne kann man die Überlaufs 1 ignorieren (bei gleicher Bitbreite) und somit erhalten wir unser gewünschtes Ergebnis y = 0,01

sollte so stimmen.

wie ist das den jetzt , wenn ich eine neue Gleitkommazahl daraus bilden will, muss ich die Überlaufs 1 mit dazurechnen also um 2 stellen nach links verschieben oder halt ganz normal die 1 von rechts holen?


Gruß
Alex

Kineese
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 111
Registriert: 14. Feb 2008 18:33

Re: Subtraktion von Gleitkommazahlen

Beitrag von Kineese » 17. Feb 2011 20:55

alex21090 hat geschrieben:Hey,
also wenn ich es richtig verstanden habe dann müsste das so gehen:

Beispiel: a = 0,75 und b = 0,50 wir wollen subtrahieren:

Binärumwandlung: a = 0,11 b = 0,10

Zweierkomplement: a = 10,00 b = 10,01

Addieren:

10,00
10,01
---------------
100,01

rausbekommen sollten wir in der Dezimalschreibweise y = 0,25 und wenn ich mich richtig entsinne kann man die Überlaufs 1 ignorieren (bei gleicher Bitbreite) und somit erhalten wir unser gewünschtes Ergebnis y = 0,01

sollte so stimmen.

wie ist das den jetzt , wenn ich eine neue Gleitkommazahl daraus bilden will, muss ich die Überlaufs 1 mit dazurechnen also um 2 stellen nach links verschieben oder halt ganz normal die 1 von rechts holen?


Gruß
Alex
Bei der Rückbildung kannst du den Überlauf ignorieren. Sieht man ja auch, denn sonst hättest du eine normierte Mantisse von 1,0001. Und einen Exponenten von 1.

Ich habs auch mal nachgerechnet und es geht auch mit normaler Subtraktion.
\(0,75 = 0,11 * 2^0 = 1,1 * 2^{-1} mit Exponent = 127-1 = 162\)
\(0,5 = 0,1 * 2^0 = 1,0 *2^{-1} mit Exponent = 127-1 = 162\)
Subtraktion:
Exponenten müssen nicht angeglichen werden, also
\(1,1_2 - 1,0_2 = 0,1_2\)
Jetzt müssen wir die Mantisse normieren. Nicht vergessen, dass der Exponent (mit Bias) 126 ist, also der Exponent -1 ist
\(0,1_2 * 2^{-1} = 1,0 * 2^{-2}\)
Wenn man das ausrechnet (oder ein gutes Auge hat) sieht man, dass es 0,25 ist.


// Nachtrag
Ich hab mir eben gedanken gemacht, was passiert wenn das Ergebnis negativ wird.
Als Bsp. hab ich 0,5 - 0,75 = -0,25
\(0,5 = 0,1 * 2^0 = 1,0 *2^{-1} mit Exponent = 127-1 = 162\)
\(0,75 = 0,11 * 2^0 = 1,1 * 2^{-1} mit Exponent = 127-1 = 162\)

Subtraktion:
\(1,0_2 - 1,1 = 01,1\)
das negieren und +1 , die 0 kommt durch den Überlauf und kann ignoriert werden
\(1,1_2 --> 0,1_2 * 2 ^{-1} = 1,0_2*2^{-2}\)
VZ-Bit auf 1 setzen und feritg

sollte ich mich doch irgendwie Irren, dann sry^^

alex21090
Windoof-User
Windoof-User
Beiträge: 25
Registriert: 14. Okt 2010 20:09

Re: Subtraktion von Gleitkommazahlen

Beitrag von alex21090 » 18. Feb 2011 07:27

danke, jetzt ist es mir wenigstens auch klar ;)

Antworten

Zurück zu „Archiv“