Lösungsvorschlag zu 1. Übung, GdI 3

Werbung
Prof. Frederik Armknecht
Sascha Müller
Daniel Mäurer
Grundlagen der Informatik 3
Wintersemester 09/10
Lösungsvorschlag zu 1. Übung
1 Präsenzübungen
1.1 Schnelltest
a) Welche der Aussagen treffen auf jeden Rechner in von Neumann-Architektur zu?
2 Es existiert ein getrennter Befehls- und Datenspeicher.
4 Er besitzt ein Rechenwerk.
2 Alle Befehle haben die gleiche Länge.
2 Er besitzt eine Komponente zur Kommunikation über Netzwerke.
b) Welches sind Bestandteile eines klassischen Betriebssystems?
2 BIOS (Basic Input Output System)
4 Speicherverwaltung
2 Speichercontroller
4 Prozessverwaltung
2 Graphische Benutzeroberfläche
c) Was sind die typischen Merkmale von Programmierung in Assembler-Sprachen?
4 Geringes Abstraktionsniveau
2 Gute Wartbarkeit
4 Hohe Effizienz
2 I. A. leichte Portabilität
2 Typsicherheit
d) Welche Aussagen zu Compiler, Assembler, Linker und Lader sind zutreffend?
2 Der Präprozessor übersetzt den Programmcode in eine andere Sprache.
4 Unter einem Compiler versteht man allgemein ein Programm, dass aus dem
Code einer höheren Programmiersprache äquivalenten Programmcode einer
niederen Sprache erzeugt.
2 Der Assembler erzeugt als Ausgabe nicht immer Maschinencode.
4 Der Linker verbindet mehrere Objekt-Programme zu einem ausführbaren Programm.
4 Der Lader wird jedes mal ausgeführt, wenn das Programm ausgeführt wird.
1.2 Gatter
Mithilfe der Gatter AND (·), OR (+) und dem Inverter können alle logischen Schaltungen implementiert werden. Man nutzt gerade diese drei Gatter, da ihre Bedeutung intuitiv ist und
man logische Ausdrücke leicht damit formulieren kann. Wir betrachten nun ein anderes,
1
Lösungsvorschlag zu 1. Übung
Grundlagen der Informatik 3, WS 09/10
ausdrucksstärkeres Gatter, das NAND, das in der Notationsweise aus der Vorlesung folgendermaßen dargestellt wird:
wobei gilt out = A · B.
a) Erstellen Sie eine Wertetabelle für NAND.
A
0
0
1
1
B
0
1
0
1
A·B
0
0
0
1
A·B
1
1
1
0
b) Betrachten Sie die folgende Schaltung, die ausschließlich aus NAND-Gattern besteht:
Welche Funktion wird durch diese Schaltung implementiert? Verwenden Sie zur Vereinfachung die De Morganschen Gesetze:
x+y = x·y
x·y = x+y
( A · ( B · B)) · (( A · A) · B)
=( A · B) · ( A · B)
(wegen x · x = x )
=( A + B) · ( A + B)
(De Morgan)
=( A · B) + ( A · B)
=A ⊕ B
(De Morgan)
Es handelt sich um eine XOR-Schaltung.
c) Zeigen Sie, dass sich alle logischen Schaltungen mithilfe von ausschließlich NAND-Gattern
implementieren lassen, man also prinzipiell nur einen einzigen Gattertyp benötigt.
2
Lösungsvorschlag zu 1. Übung
Grundlagen der Informatik 3, WS 09/10
Es gilt
• A = A·A
• A · B = A · B = ( A · B) · ( A · B)
• A + B = A · B = ( A · A) · ( B · B)
Wenn sich aber AND, OR und die Invertierung mit NAND implementieren lassen,
kann man damit alle Schaltungen realisieren.
1.3 Zahlendarstellung
a) Gegeben sind die Zahlen 4638 und −42.
1. Stellen Sie diese Zahlen als 16-Bit breite Vorzeichen-Betragsdarstellung sowohl
binär als auch hexadezimal dar.
463810 = 0001 0010 0001 11102 = 121E16
−4210 = 1000 0000 0010 10102 = 802A16
2. Stellen Sie diese Zahlen als 16-Bit 2er-Komplement dar.
463810
−4210
=
=
0001 0010 0001 11102 = 121E16
1111 1111 1101 01102 = FFD616
b) Für welche Basis b gilt 121b = 10010 ?
Zu lösen ist (wie gewohnt in Basis 10 geschrieben)
1 · b2 + 2 · b1 + 1 · b0 = 100 .
Daraus folgt direkt b = 9.
c) Betrachten Sie die beiden 3-Bit-Zahlen a = 1112 und b = 1012 . Berechnen Sie mit
einem möglichst einfachen Verfahren a + b, a − b und a · b, ohne die Zahlen vorher in
die Dezimaldarstellung umzuwandeln.
Interpretieren Sie a und b nun als vorzeichenbehaftete 3-Bit Ganzzahlen in Zweierkomplementdarstellung. Können Sie die Ergebnisse, die Sie erhalten haben, irgendwie nutzen?
111 · 101
+
111
11100
100011
Wenn wir a und b als vorzeichenbehaftet betrachten, gilt a = −1 und b = −3, und
außerdem a + b = −1 + (−3) = −4 = 1002 , a − b = −1 − (−3) = 2 = 0102 und
a · b = −1 · (−3) = 3 = 0112 .
Die hinteren drei Bits der Ergebnisse sind jeweils korrekt.
111
101
1100
111
101
010
d) Um auch rationale Zahlen binär darstellen zu können, kann man die Formel von Kapitel 1, Folie 17 wie folgt verallgemeinern:
bn−1 bn−2 . . . b1 b0 , c1 c2 . . . cm−1 cm =
3
n −1
m
i =0
i =1
∑ bi 2 i + ∑ c i 2 − i
Lösungsvorschlag zu 1. Übung
Grundlagen der Informatik 3, WS 09/10
Die i. binäre Nachkommastelle wird also mit 2−i multipliziert.
1. Stellen Sie die Binärzahl 1100, 1012 dezimal dar.
23 + 22 + 2−1 + 2−3 = 12.625
2. Approximieren Sie π ≈ 3, 14159265 binär auf 4 Nachkommastellen genau.
π ≈ 11, 00102 . Wichtig ist hier aber in erster Linie der Rechenweg: Entweder
man berechnet π · 25 ≈ 100, 53 ≈ 1100100, 12 und verschiebt dann das Komma
um 5 Stellen nach links, oder man entwickelt die Nachkommastellen von π
durch Probieren in der Form π − 3 ≈ 2−3 + 2−6 + 2−11 + . . ..
1.4 Gleitkommazahlen
Gegeben sei ein Rechner, der mit 8-Bit Gleitkommazahlen arbeitet. Diese 8 Bit teilen sich
auf in 1 Bit für das Vorzeichen, 3 Bit für den Exponenten und 4 Bit für die Mantisse:
V E E E M M M M
r = −1V · (1 + M ) · 2E−Bias
a) Wie groß ist der Bias, der für die Darstellung des Exponenten verwendet wird?
Allgemein ergibt sich der Bias für einen n-Bit Exponenten als 2n−1 − 1. Da in diesem
Beispiel 3 Bit für den Exponenten zur Verfügung stehen, beträgt der Bias also 23−1 −
1 = 3.
b) Wandeln Sie die Zahl 6, 25 in die beschriebene Darstellung um.
6, 2510 = 110, 012 = 1, 10012 · 22 . Somit besteht die Mantisse aus 1001 und der Exponent mit Bias aus 2 + 3 = 510 = 1012 , das Vorzeichen ist 0. Insgesamt lautet die 8-Bit
Gleitkommazahl 0 101 1001.
c) Wandeln Sie die Zahl −0, 78125 in die beschriebene Darstellung um.
−0, 7812510 = −1, 562510 · 2−1 = −1, 10012 · 2−1 . Für die Mantisse ergibt sich wie
zuvor 1001, aber der Exponent mit Bias beträgt −1 + 3 = 210 = 0102 , das Vorzeichen
ist 1, da negativ. Damit ergibt sich die Lösung als 1 010 1001.
d) Geben Sie ein Verfahren in Pseudocode an, mit dem zwei Zahlen, die in dieser Darstellung vorliegen, miteinander multipliziert werden können. Als Eingabe erhalten
Sie zwei Darstellungen von Gleitpunktzahlen als Tupel hV1 , M1 , E1 i bzw. hV2 , M2 , E2 i.
Wie berechnet man das Ausgabetupel hV3 , M3 , E3 i? Sonderfälle (wie 0, NaN oder ∞)
müssen Sie hier nicht betrachten.
function multiply ( hV1 , M1 , E1 i >, hV2 , M2 , E2 i ):
V3 :=
return hV3 , M3 , E3 i
4
Lösungsvorschlag zu 1. Übung
Grundlagen der Informatik 3, WS 09/10
function multiply ( hV1 , M1 , E1 i , hV2 , M2 , E2 i ):
V3 := V1 ⊕ V2
E3 := E1 + E2 − 3
M3 := (1 + M1 ) · (1 + M2 ) // davon die ersten 5 Stellen
while M3 ≥ 2.0
M3 := M3 /2
E3 := E3 + 1
end while
M3 := M3 − 1.0
return hV3 , M3 , E3 i
e) Multiplizieren Sie mit diesem Verfahren die beiden Repräsentation von 6, 25 und
−0, 78125. Geben Sie das Ergebnis in Gleitkommadarstellung an und wandeln Sie
es in die Dezimalzahldarstellung um.
Es ergibt sich V3 = 1. Das Produkt aus M1 + 1 und M2 + 1 ist 10, 011100012 , wovon
nur die ersten fünf Stellen betrachtet werden (4 Bits Mantissenbreite + implizite 1).
Nach Multiplikation mit 2 und entfernen der impliziten 1 ergibt sich M3 = 0, 00112
und E3 = 5, als Gleitkommazahl 1 101 0011.
Als Dezimalzahl ist dies nach der Formel −1V · (1 + M ) · 2E−Bias = −11 · 1, 00112 ·
25−3 = −4, 75.
2 Hausübungen
2.1 Negation von Integern
In der Zweierkomplementdarstellung wird eine Zahl negiert, indem man sie invertiert und
1 addiert, also − x := x + 1. Zeigen Sie, dass dann auch gilt − x = x − 1.
4 Punkte
Setze y := x − 1.
de f
Es gilt − x = −(y + 1) = −y − 1 = (y + 1) − 1 = y = y + 1 − 1 = x − 1.
2.2 Schnelle Integer-Multiplikation
Wie Sie in Aufgabe 1.3 c gesehen haben, hat die Multiplikation von Binärzahlen quadratische Komplexität in der Anzahl der Bit-Operationen. Durch Ausnutzung der Bit-Darstellung
kann man dies jedoch für gewisse Multiplikatoren stark beschleunigen. Wir nutzen hierzu
aus, dass man an Bitwerte eine 0 anhängen kann, um sie mit 2 zu multiplizieren. Der Syntax
der Programmiersprache C folgend schreiben wir a << b, wenn wir an einen Wert a eine
Anzahl von b Nullen anhängen (und damit a · 2b berechnen). Damit lässt sich zum Beispiel
das Ergebnis von 65x effizient mit einem solchen Bit-Shift und einer Addition erreichen, da
65 = 26 + 1 und daher 65x = ( x << 6) + x.
Optimieren Sie die folgenden Operationen auf diese Weise und geben Sie jeweils die Anzahl
der Bit-Operationen an. Sie können außerdem die Formeln aus der Aufgabenstellung von
Aufgabe 2.1 verwenden.
a) 5x =
1 Punkt
5x = ( x << 2) + x — zwei Operationen
5
Lösungsvorschlag zu 1. Übung
Grundlagen der Informatik 3, WS 09/10
b) 162x =
162x = ( x << 7) + ( x << 5) + ( x << 1) – fünf Operationen
1 Punkt
c) −1024x =
1 Punkt
−2x = x << 10 + 1 bzw. −2x = ( x << 10) − 1 – drei Operationen.
2.3 Gleitpunktzahlen
Gegeben ist eine Gleitpunktzahl G im einfach genauen IEEE-754 Standard in Hexadezimaldarstellung
G = C080 000016
Leiten Sie den dezimalen Wert von G her. Der Lösungsweg muss klar erkennbar sein!
3 Punkte
Die Zahl in Binärschreibweise:
G = 1100 0000 1000 0000 0000 0000 0000 00002 .
Das erste Bit ist gesetzt, daher handelt es sich um eine negative Zahl (S = 1). Es gilt
E = 1000 00012 = 129 und M = 0, 000 0000 0000 0000 0000 00002 = 0. Daher gilt: G =
(−1)S · (1 + M) · 2(127−E) = (−1) · 1, 0 · 22 = −4, 0
6
Herunterladen