0 Daumen
1,6k Aufrufe

Aufgabe:

für die Klausur muss ich zwei Gleitkommazahlen subtrahieren jedoch mit zwei unterschiedlichen Vorzeichen.

GKZ1: 0  10000101  01010011000000000000000

GKZ2: 1  10000011  10110100000000000000000


ich weiss ich sollte das Vorzeichen von GKZ 1 in eine 1 umwandeln,  nachdem ich das getan, sollte man das my*2^q nehmen. ich wüsste leider nicht wie ich da vorgehe. wie wandle ich das um bzw. wie gehe ich im allgemeinen bei additions/subtarktions aufgaben vor. gibt es da bestimmte Vorgehensweisen, die Einges erleichtern.

vielen Dank im voraus ihr lieben.


Problem/Ansatz:

Avatar von

1 Antwort

0 Daumen

Hallo,

gibt es da bestimmte Vorgehensweisen, die Einges erleichtern.

Ja - zunächst mal sollte man verstehen, wie die Zahlen, so wie Du sie geschrieben hast, aufgebaut sind. Ich unterstelle, es handelt sich um ein binäres Memory-Abbild einer Zahl im Format IEEE-754 mit 32Bit.

Das erste Bit gibt das Vorzeichen \(s\in\{+1,\, -1\}\) an, wobei vz=0 für eine positive Zahl steht \(s=+1\). Die folgenden 8Bit sind der Exponent \(E\). Zitat:

Der Exponent \(e\) wird als nichtnegative Binärzahl gespeichert, indem man den festen Biaswert \(B\) addiert: $$E=e+B$$

für GZ1 ist \(E=10000101_2 = 85_{16} = 133\). Der Bias-Wert ist hier definitionsgemäß \(B=2^{8-1}-1=127\). Also ist $$e = E - B = 133 - 127 = 6$$ Die letzte Bitfolge ist dann die Mantisse \(m\), mit \(1 \le m \lt 2\). Wobei die führende 1 nicht mit abgespeichert wird - also hier für GZ1$$m = 1,01010011_2 =1,53_{16} = 1 + 5 \cdot 16^{-1} + 3\cdot 16^{-2} = 1,32421875$$Alles zusammen gibt dann $$z = s \cdot m \cdot 2^e \\ z_1 = (+1) \cdot 1,32421875 \cdot 2^6 = 84,75$$GZ2 =-27,25. Da hier GZ2 kleiner 0 ist, und Du beide Zahlen abziehen sollst, so ist natürlich GZ1-GZ2 = GZ1+(-GZ2) naheliegend. Also verbleibt die Addition von

 GKZ1: 0  10000101  01010011000000000000000 
-GKZ2: 0  10000011  10110100000000000000000

Für die Addition verschiebt man die Mantisse der kleineren Zahl so weit, dass die Exponenten überein stimmen. Ich kennzeichne die führende 1 mit einem \(X\) und führe die Addition binär aus:

 GKZ1: 0  10000101  X.01010011000000000000000
-GKZ2: 0  10000101  0.0X101101000000000000000
                  X.11000000000000000000000

addiert wird natürlich nur die Mantisse! Wenn noch ein Überlauf stehen bliebe, so müsste man den Exponenten entsprechend erhöhen. Dies ist aber hier nicht der Fall. Das Ergebnis GZ3 ist

GKZ3: 0 10000101 11000000000000000000000

$$z_3 = (+1) \cdot 2^{133-127} \cdot 1,11_2 = 2^6 \cdot 1,75=112$$

Avatar von 48 k

vielen lieben dank für die Beschreibung nur jetzt frage ich mich wie macht man es mit einer Multiplikation. hättest du da auch einen Ansatz für mich ich habe nämlich alle Ergebnisse vorliegen nur bin ich mir gar nicht mehr sicher ob es nun stimmt.

vielen lieben dank nochmal

.. wie macht man es mit einer Multiplikation?

Du gehst immer davon aus, dass jede Zahl \(z\) als $$z = s \cdot m \cdot 2^e$$dargestellt wird. Demnach wäre die Multiplikation$$z_1 \cdot z_2 = (s_1 \cdot s_2) \cdot (m_1 \cdot m_2) \cdot 2^{e_1 + e_2}$$Zum Vorzeichen muss ich wohl nichts sagen - die binäre Operation ist ein 'exklusiv oder'.

Bei der Mantisse werden zwei Zahlen multipliziert, die sich beide im Intervall \([1,\, 2)\) befinden. Folglich liegt das Ergebnis zunächst mal im Intervall \([1,\, 4)\). Die binäre Multiplikation läuft genauso, wie Du schriftlich multiplizieren gelernt hast (nur schneller)

Für den Exponenten wird maschinenintern die Addition $$E = e + B = (e_1 + e_2) + B \\ \quad = (E_1 - B) + (E_2 - B) + B = E_1 + E_2 - B$$ ausgeführt.

Ist das Ergebnis der Mantissenmultiplikation \(\ge 2\) so wird der Exponent zusätzlich um 1 erhöht und die Mantisse nach rechts 'geshiftet'.

Dankesehr für die Zeit und die mühe ich werde mal anhand deiner Beschreibung einmal beide Aufgaben bearbeiten bzw. überarbeiten und hoffe, dass ich das für die Klausur drauf habe .

Dankesehr einen schönen Tag wünsche ich dir.

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Mathelounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community