Ver código fonte

add num1

master
flavis 5 anos atrás
pai
commit
61762f724d
3 arquivos alterados com 144 adições e 0 exclusões
  1. +20
    -0
      sose2020/num/uebungen/nulladdition.cpp
  2. BIN
      sose2020/num/uebungen/num1.pdf
  3. +124
    -0
      sose2020/num/uebungen/num1.tex

+ 20
- 0
sose2020/num/uebungen/nulladdition.cpp Ver arquivo

@@ -0,0 +1,20 @@
#include<iostream>
#include<iomanip>

using namespace std;

int main() {
cout << setprecision(17);
cout << setw(10);
cout << "Enter a float > ";
float x;
cin >> x;
x = x + 1;
cout << x << endl;

cout << "Enter a double > ";
double y;
cin >> y;
y = y + 1;
cout << y << endl;
}

BIN
sose2020/num/uebungen/num1.pdf Ver arquivo


+ 124
- 0
sose2020/num/uebungen/num1.tex Ver arquivo

@@ -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}

Carregando…
Cancelar
Salvar