Multiplizieren von Mantissen?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
1.1001011 * 1.01010101
======================
              11001011
           11 001011
         1100 1011
       110010 11
    1 1001011
======================
   10.0001110 01100111

Die Faktoren haben 7 und 8 Nachkommastellen
also hat das Ergebnis 15 Nachkommastellen
==> 10.000111001100111
Und dann noch die Exponenten richten ...

-6,34375 * 42,625 = -270,40234375
1 1000 0111 0000 1110 0110 0111 0000 000

Deine Mantissenmultiplikation stimmt.

Dann musst du noch den Exponenten bestimmen. Dazu von den Exponenten jeweils den Exzess abziehen und die Ergebnisse addieren (der Exzess ist glaube ich 127, aber bin nicht sicher).

Dann muss man den Punkt im Mantissenprodukt so verschieben, dass man wieder 1 vor dem Punkt hat, und die Verschiebung muss zur Exponentensumme addiert werden. Muss man z. B. den Punkt 1 nach links schieben, wird das Produkt dadurch um den Faktor 2 kleiner, zum Ausgleich wird 1 zum Exponenten addiert.

Dann wieder zum Exponenten den Exzess addieren und vom Mantissenprodukt die 23 Bits nach dem Punkt speichern.

Woher ich das weiß:Hobby
EkkoMcfly 
Fragesteller
 08.11.2021, 19:07

Oh man irgendwie ist das mega verwirrend. Wenn ich halt beide Zahlen nehme und in Dezimal umrechne dann habe ich einmal -6,34375 und einmal 42,625.

So wenn ich jetzt einfach, diese Zahlen im Taschenrechner multipliziere komme ich auf -270,402 und wenn ich das wieder in IEEE 754 Standard umrechne komme ich auf folgendes:

1 1000 0111 0000 1110 0110 0110 1110 101

Aber ich komme einfach nicht auf dieses Ergebnis.

Zuerst habe ich das Vorzeichen ausgerechnet, das geht ja ganz einfach mit xor:

1 xor 0 = 1

Also habe ich schonmal das Vorzeichen, welches auch richtig ist.

Ich habe probiert mit deiner Methode den Exponenten auszurechnen, also die Charakterisitk.

Dazu habe ich von der ersten Charakteristik 127 subtrahiert:

1000 0001 - 0111 1111 = 0000 0010

Von der zweiten Charakteristik habe ich auch 127 subtrahiert:

1000 0100 - 0111 1111 = 1000 0101

Dann habe ich die beiden Ergebnisse addiert:

0000 0010 + 1000 0101 = 1000 0111

Okay damit habe ich die Charakteristik, welche auch korrekt ist.

Nun hänge ich aber immer noch bei der Mantisse:

Ich habe mir erstmal die Antwort eines weiteren Nutzers angeschaut, welcher als Mantisse folgende angegeben hatte:

1.0000 1110 0110 0111 0000 000

Aber diese Mantisse stimmt nicht mit der überein, die die richtige Gleitkommazahl eigentlich hat.

Da diese Mantisse aber in drei Bytes mit der richtigen Mantisse übereinstimmt, muss ja ein richtiger Ansatz dahinter stecken und man muss wahrscheinlich noch irgendwas mit der Mantisse machen, damit ich auf die richtige Mantisse komme. Du hast ja geschrieben, dass man den Punkt im Mantissenprodukt so verschieben muss, dass wieder eine eins davor steht, das ist ja aber bei der angegebenen Mantisse schon der Fall, also muss ich da ja nichts mehr verschieben. Aber wie komme ich jetzt auf die richtige Mantisse?

0
Thomas416  08.11.2021, 19:29
@EkkoMcfly

Das liegt an dem Rundungsfehler, wenn man nur auf 6 Stellen rechnet; genauer ist das Ergebnis -270.40234375

1
EkkoMcfly 
Fragesteller
 08.11.2021, 19:51
@Thomas416

Oh man es hätte alles so einfach sein können, hätte ich daran gedacht. Stundenlanges Kopfzerbrechen nur, weil mir mein Tascherechner nur drei Nachkommastellen anzeigt. Aber vielen, vielen Dank für deine Hilfe!

0
Schachpapa  08.11.2021, 20:53
@EkkoMcfly

Der Windows-Rechner rechnet m.W. intern mit 64bit Gleitkommazahlen. Das sollte reichen. Der kann auch binäre Integer.

Welcher Taschenrechner rechnet diese Multiplikation denn auf nur 3 Nachkommastellen?

1
EkkoMcfly 
Fragesteller
 08.11.2021, 22:56
@Schachpapa

Ich habe meinen Taschenrechner aus der Schule genutzt. Ein TI-nspire CX CAS.

Der rechnet eigentlich auch auf 8 Nachkommastellen, aber dafür muss man sozusagen erst auf das Ergebnis klicken.

Und das habe ich halt nicht gemacht.

0
Schachpapa  08.11.2021, 23:03
@EkkoMcfly

Hinterher ist man immer schlauer. 3 und 5 Nachkommastellen ergeben im Produkt 8 Nachkommastellen und die müssen in diesem Fall mit 5 enden.

1
EkkoMcfly 
Fragesteller
 08.11.2021, 23:02

Ich habe noch eine weitere Frage dazu.

Die Charakteristik ist ja eigentlich folgende:

1000 0111

Aber wie genau komme ich da auf die linke 1?

Ich habe deine Methode angewandt, also von der ersten Charakteristik habe ich 127 abgezogen:

1000 0001 - 0111 1111 = 0000 0010

Dann subtrahierte ich 127 von der zweiten Charakteristik:

1000 0100 - 0111 1111 = 0000 0101

Eigentlich kommt da ja 0000 0101 raus und nicht wie ich vorher geschrieben habe 1000 0101.

So wenn ich jetzt die beiden Ergebnisse addiere komme ich auf folgendes:

0000 0010 + 1000 0101 = 0000 0111

Und diese Charakteristik ist ja nicht die richtige, eigentlich müsste ganz links anstatt einer 0 eine 1 stehen, aber wie rechne ich, dass dort ganz links eine 1 steht?

0
EkkoMcfly 
Fragesteller
 08.11.2021, 23:26
@Schachpapa

Was soll ich +127 rechnen? Ich habe viele verschiedene Kombinationen ausprobiert und komme bei keiner auf 1000 0111.

Einmal habe ich mein Endergebnis +127 gerechnet:

0000 0111 + 0111 1111 = 1000 0110

Dann habe ich die einzelnen Charakteristiken +127 gerechnet:

1000 0001 + 0111 1111 = 1| 0000 0000
1000 0100 + 0111 1111 = 1| 0000 0011

Ich komme bei beiden nicht auf 1000 0111.

0
Schachpapa  08.11.2021, 23:49
@EkkoMcfly

Also nochmal von vorne:

1 1000 0001 1001 0110 0000 0000 0000 000
steht für (-1)^1 * 2^(129-127) * 1.1001 011 
= -1,5859375 * 4 = -6,34375

0 1000 0100 0101 0101 0000 0000 0000 000
steht für (-1)^0 * 2^(132-127) * 1.0101 0101
= +1,33203125 * 32 = 42,625

Das Produkt der Mantissen ergibt
2,112518310546875
* 2^2^(2+5) = 270,40234375

Dadurch, dass das Produkt größer als 1 ist, ist der Exponent entsprechend kleiner. Normierung auf 1 vor dem Komma macht ihn wieder 1 größer.

(129-127) + (132-127)+127 = 2+5+127 =134 = 1000 0110

--> 1000 0111 Passt

Bei meiner schriftlichen Multiplikation habe ich die Nachkommastellen nicht richtig berücksichtigt, ich korrigiere das mal ...

1
Thomas416  09.11.2021, 13:48
@EkkoMcfly

Du vergisst, dass durch das Normalisieren der Mantisse (Punkt um 1 nach links schieben) noch 1 zum Exponenten zu addieren ist.

1