|
|
@@ -0,0 +1,124 @@ |
|
|
|
|
|
\documentclass[uebung]{../../../lecture} |
|
|
|
|
|
|
|
|
|
|
|
\begin{document} |
|
|
|
|
|
|
|
|
|
|
|
\title{Einführung in die Numerik: Übungsblatt 1} |
|
|
|
|
|
\author{Leon Burgard, Christian Merten} |
|
|
|
|
|
|
|
|
|
|
|
\punkte |
|
|
|
|
|
|
|
|
|
|
|
\begin{aufgabe} |
|
|
|
|
|
\begin{enumerate}[a)] |
|
|
|
|
|
\item Zur Basis 10 dargestellt: |
|
|
|
|
|
\[ |
|
|
|
|
|
(0.5731 \times 8^{5})_{8} = (5\cdot 8^{-1} + 7 \cdot 8^{-2} + 3 \cdot 8^{-3} + 1 \cdot 8^{-4}) |
|
|
|
|
|
\cdot 8^{5} = 24264 = 0.24264 \times 10^{5} |
|
|
|
|
|
.\] |
|
|
|
|
|
\item Die Zahl $x_1 = (0.3)_{10} \in \R$ |
|
|
|
|
|
in der normierten Fließkommadarstellung |
|
|
|
|
|
$\mathbb{F}(2,11,2)$ ergibt |
|
|
|
|
|
\[ |
|
|
|
|
|
(0.10011001100 \times 2^{1})_{2} |
|
|
|
|
|
.\] |
|
|
|
|
|
Zurück in $\mathbb{F}(10,r,1)$ ergibt |
|
|
|
|
|
\[ |
|
|
|
|
|
(0.2998046875 \times 10^{0})_{10} |
|
|
|
|
|
.\] Das heißt für $r = 1$, $r = 2$ und $r = 3$ ergibt natürliche Rundung |
|
|
|
|
|
jeweils $(0.3)_{10}$. Größere $r$ ergeben andere Ergebnisse. |
|
|
|
|
|
\item Die größte positive Zahl in $\mathbb{F}(4, 6, 2)$ ergibt sich im Dezimalsystem dargestellt |
|
|
|
|
|
als: |
|
|
|
|
|
\[ |
|
|
|
|
|
3 \cdot (4^{-1} + 4^{-2} + 4^{-3} + 4^{-4} + 4^{-5} + 4^{-6}) \cdot 4^{3\cdot 4^{0} + 3\cdot4^{1}} |
|
|
|
|
|
= 0.1073 \cdot 10^{10} |
|
|
|
|
|
.\] Die kleinste negative Zahl in $\mathbb{F}(3, 7, 1)$ ergibt sich im Dezimalsystem dargestellt |
|
|
|
|
|
als: |
|
|
|
|
|
\[ |
|
|
|
|
|
- 2 \cdot (3^{-1} + 3^{-2} + \ldots + 3^{-7}) \cdot 3^{2 \cdot 3^{0}} \approx -0.8996 \cdot 10^{1} |
|
|
|
|
|
.\] Damit folgt für den maximalen Abstand zweier Zahlen aus $\mathbb{F}(4,6,2)$ und |
|
|
|
|
|
$\mathbb{F}(3,7,1)$: |
|
|
|
|
|
\[ |
|
|
|
|
|
\max_{x_2, x_3} | x_2 - x_3 | \approx |
|
|
|
|
|
0.1073 \cdot 10^{10} + 0.8996 \cdot 10^{1} \approx 0.1073 \cdot 10^{10} |
|
|
|
|
|
.\] |
|
|
|
|
|
\item Die Aussage ist falsch. Gegenbeispiel: $\mathbb{F}(2, 2, 1)$. Die Menge der darstellbaren |
|
|
|
|
|
Zahlen ist hier, analog zur Vorlesung: |
|
|
|
|
|
\[ |
|
|
|
|
|
\mathbb{F}(2,2,1) = \left\{- \frac{3}{2}, -1, -\frac{3}{4}, -\frac{1}{2}, -\frac{3}{8}, |
|
|
|
|
|
-\frac{1}{4}, 0, \frac{1}{4}, \frac{3}{8}, \frac{1}{2}, \frac{3}{4}, 1, \frac{3}{2}\right\} |
|
|
|
|
|
.\] Hier ist sofort zu sehen, dass beispielsweise für $x_4 = 1$ gilt: |
|
|
|
|
|
\[ |
|
|
|
|
|
\left| 1 - \frac{3}{4}\right| = \frac{1}{4} \neq \frac{1}{2} = \left| \frac{3}{2} - 1 \right| |
|
|
|
|
|
.\] |
|
|
|
|
|
\end{enumerate} |
|
|
|
|
|
\end{aufgabe} |
|
|
|
|
|
|
|
|
|
|
|
\begin{aufgabe} |
|
|
|
|
|
Die ersten zehn Folgenglieder in Dezimaldarstellung (nicht normiert): |
|
|
|
|
|
\begin{table}[h!] |
|
|
|
|
|
\centering |
|
|
|
|
|
\label{tab:label} |
|
|
|
|
|
\begin{tabular}{ccc} |
|
|
|
|
|
$n$ & Aufrunden & gerades Runden \\ |
|
|
|
|
|
$0$ & $2.46$ & $2.46$ \\ |
|
|
|
|
|
$1$ & $2.47$ & $2.46$ \\ |
|
|
|
|
|
$2$ & $2.48$ & $2.46$ \\ |
|
|
|
|
|
$3$ & $2.49$ & $2.46$ \\ |
|
|
|
|
|
$4$ & $2.50$ & $2.46$ \\ |
|
|
|
|
|
$5$ & $2.51$ & $2.46$ \\ |
|
|
|
|
|
$6$ & $2.52$ & $2.46$ \\ |
|
|
|
|
|
$7$ & $2.53$ & $2.46$ \\ |
|
|
|
|
|
$8$ & $2.54$ & $2.46$ \\ |
|
|
|
|
|
$9$ & $2.55$ & $2.46$ \\ |
|
|
|
|
|
$10$ & $2.56$ & $2.46$ \\ |
|
|
|
|
|
\end{tabular} |
|
|
|
|
|
\end{table} |
|
|
|
|
|
|
|
|
|
|
|
Beim Aufrunden ist deutlich zu sehen, dass, da nach jedem Rechenschritt die 4. Stelle |
|
|
|
|
|
auf $5$ steht, jedes mal aufgerundet wird. Da zwei Rundungen pro Folgenglied stattfinden, |
|
|
|
|
|
führt das zu einer Erhöhung um $2 \cdot 0.005 = 0.01$ pro Folgenglied. |
|
|
|
|
|
|
|
|
|
|
|
Beim geraden Runden wird zwar nach der ersten Operation aufgerundet, nach der zweiten jedoch nicht. |
|
|
|
|
|
Deshalb bleibt das Ergebnis exakt. |
|
|
|
|
|
\end{aufgabe} |
|
|
|
|
|
|
|
|
|
|
|
\begin{aufgabe} |
|
|
|
|
|
Programm zum Test der Nulladdition: |
|
|
|
|
|
\begin{lstlisting}[language=C++, title=nulladdition.cpp, captionpos=b] |
|
|
|
|
|
#include<iostream> |
|
|
|
|
|
#include<iomanip> |
|
|
|
|
|
|
|
|
|
|
|
using namespace std; |
|
|
|
|
|
|
|
|
|
|
|
int main() { |
|
|
|
|
|
// set output width and precision |
|
|
|
|
|
cout << setprecision(17); |
|
|
|
|
|
cout << setw(10); |
|
|
|
|
|
|
|
|
|
|
|
// float |
|
|
|
|
|
cout << "Enter a float > "; |
|
|
|
|
|
float x; |
|
|
|
|
|
cin >> x; |
|
|
|
|
|
x = x + 1; |
|
|
|
|
|
cout << x << endl; |
|
|
|
|
|
|
|
|
|
|
|
// double |
|
|
|
|
|
cout << "Enter a double > "; |
|
|
|
|
|
double y; |
|
|
|
|
|
cin >> y; |
|
|
|
|
|
y = y + 1; |
|
|
|
|
|
cout << y << endl; |
|
|
|
|
|
}\end{lstlisting} |
|
|
|
|
|
\begin{enumerate}[a)] |
|
|
|
|
|
\item Bei Verwendung von \lstinline{float} muss $x$ als $5\cdot 10^{-8}$ gewählt werden, bei |
|
|
|
|
|
Verwendung von \lstinline{double} muss $x$ als $10^{-16}$ gewählt werden, damit |
|
|
|
|
|
exakt $1$ zurückgegeben wird. |
|
|
|
|
|
\item Das ist bei weitem nicht die kleinste positive Zahl, die \lstinline{float} bzw. |
|
|
|
|
|
\lstinline{double} darstellen können, da im Exponenten noch weit mehr Stellen zur Verfügung |
|
|
|
|
|
stehen, um sehr viel kleinere positive Zahlen darstellen zu können. |
|
|
|
|
|
|
|
|
|
|
|
Allerdings kann dies hier nicht genutzt werden, da durch die Addition mit $1$ gerundet werden |
|
|
|
|
|
muss. |
|
|
|
|
|
\end{enumerate} |
|
|
|
|
|
\end{aufgabe} |
|
|
|
|
|
|
|
|
|
|
|
\end{document} |