MATHEMATISCHES INSTITUT DER UNIVERSITÄT MÜNCHEN Dr. W. Spann, G. Kleen SS 2023

Programmieren I für Studierende der Mathematik

Aufgabe 11

(a) Erstellen Sie unter Verwendung der Funktion frexp eine Funktion frexp4, die eine reelle Zahl a ≠ 0 in b · 4^{n} mit n ∈ ℤ und \frac{1}{4} ≤ |b| < 1 zerlegt und b als Funktionswert liefert. Der Wert von n soll über einen Referenzparameter zugänglich sein.

(b) Mit dem folgenden Verfahren kann ohne Gleitpunktdivisionen die Quadratwurzel einer reellen Zahl a > 0 berechnet werden.

1. Zerlegen Sie a = b · 4^{n} mit n ∈ ℤ und \frac{1}{4} ≤ b < 1.

2. Berechnen Sie x = \frac{1}{\sqrt{b}} mit dem Newtonverfahren für die Fkt. f(x) = \frac{1}{x^{2}} − b (x > 0):

x_{0} = 1
x_{k+1} = \frac{x_{k}}{2} (3 − bx_{k}^{2}) (k ∈ ℕ_{0})

3. Benutzen Sie, dass \sqrt{a} = b · x · 2^{n}.

Erstellen Sie eine Funktion mysqrt, die \sqrt{a} für a > 0 nach diesem Verfahren berechnet und 0 für a = 0 zurückgibt. Falls a < 0 vorliegt, soll die Funktion NaN (“Not a Number“) liefern und den Fehler EDOM setzen.

Drucken Sie in einem Rahmenprogramm a, mysqrt(a) und zum Vergleich sqrt(a) jeweils im Exponentialformat mit einer der zu erwartenden Genauigkeit angepassten Mantissenlänge und geben Sie jeweils die entsprechende Fehlermeldung aus, wenn eine der beiden Funktionen errno auf einen Wert ungleich 0 setzt.

Hinweise:

1. Verwenden Sie die Funktion frexp4 aus (a).

2. Brechen Sie die Iteration ab , wenn |x_{k+1} − x_{k}| ≤ εx_{0}. Wählen Sie für ε etwa das 5-10-fache der Maschinengenauigkeit.

3. Die Berechnung der Zweierpotenz soll mit der Funktion ldexp erfolgen.

    Den Rückgabewert NaN können Sie durch numeric_limits<double>::quiet_NaN()

erzeugen.

Testen Sie neben zwei eigenen Beispielen die Fälle

(i) 12.9  (ii) 1.98 · 10^{11}  (iii) 2 · 10^{−308}  (iv) 1.79 · 10^{308}  (v) −3.3

Bearbeitungszeitraum: bis Freitag, 21.7.2023, 12^{00}