Übung I zur Vorlesung Informatik III Prof. Dr. Nikolaus Wulff Zum 14. Oktober 2010 1 ADT Polynom Entwickeln Sie den generischen Datentyp Polynom. Eine (reelle) Polynomfunktion n-ten Gerades ist definiert als eine Abbildung pn : R x → R 7→ pn (x) := an xn + · · · + a1 x + a0 , an 6= 0. (1) Hierbei sind die reelle Zahlen a0 , a1 , · · · , an ∈ R die (n + 1) Koeffizienten des Polynoms pn (x). Sehen sie für den ADT eine geeignete Struktur vor, so dass eine allgemeine eval-Funktion ein solches Polynom für ein beliebiges x ∈ R auswerten kann, wie in der Headerdatei (1) vorgesehen. Entwickeln Sie eine effiziente Implementierung der fehlenden Funktionen. 1 2 3 /∗ polynom.h ∗/ #ifndef POLYNOM H #define POLYNOM H 4 5 6 7 8 /∗ structure for ADT Polynom ∗/ typedef struct polynom struct { /∗ attributes missing ∗/ } ∗Polynom; 9 10 11 /∗ evaluate polynom p(x) at point x ∗/ double eval(double x, Polynom p); 12 13 14 /∗ add two polynoms ∗/ Polynom addpoly(Polynom p1, Polynom p2); 15 16 17 /∗ multiply two polynoms ∗/ Polynom multpoly(Polynom p1, Polynom p2); 18 19 20 #endif /∗ POLYNOM H ∗/ Listing 1: Header Datei für den ADT Polynom. 1 Tip Die Summe (1) eignet sich gut für eine Auswertung nach dem Horner Schema, d.h. die pow-Funktion wird nicht benötigt! Zur Berechnung der Koeffizienten bei der Multiplikation zweier Polynome eignet sich die Cauchy Produkt Formel. 2 Komplexe Division Die Division zwei komplexer Zahlen u, v ∈ C mit u ≡ a + jb und v ≡ c + jd für a, b, c, d ∈ R ist für v 6= 0 definiert als a + jb u = v c + jd ac + bd ⇒ Real(z) = 2 c + d2 z= ≡ , ac + bd + j(bc − ad) uv = |v|2 c2 + d2 bc − ad Imag(z) = 2 . c + d2 (2) (3) Es ist allerdings auch möglich die Division mit Hilfe der Polardarstellung z = rz ejφz einer komplexen Zahl vorzunehmen: ru ejφu u = v rv ejφv = ru cos(φu − φv ) rv , z= ⇒ Real(z) = ru j(φu −φv ) e rv ru Imag(z) = sin(φu − φv ) rv (4) (5) Mathematisch sind beide Divisionsergebnisse equivalent, sieht man von Rundungsfehlern einmal ab. Es ergibt sich jedoch auf Grund der trigonometrischen Funktionen und der Wurzeloperation ein unterschiedliches Laufzeitverhalten für beide Lösungen. Aufgabe Zeigen Sie um wie viel aufwändiger die Division mittels Polarkoordinaten nach Formel 5 im Vergleich zur direkten Berechnung nach Formel 3 ist. Verwenden Sie die folgenden Tabelle zur Gewichtung der entsprechenden Operationen: Operation add, sub mult, div sqrt sin, cos, atan Gewicht 1 2 4 20 Diese Tabelle ist gewichtet nach der Anzahl von CPU Zyklen für eine 386 FPU mit der Addition normiert auf 1. Tip Erstellen Sie einen Aufrufgraph (⇒ Baumstruktur) aller benötigen Operationen und gewichten Sie die Knoten entsprechend der Tabelle. Vernachlässigen Sie den Aufwand, um Zwischenergebnisse zwischen Speicher und FPU Register hin und her zu schreiben. 2