Beruflich Dokumente
Kultur Dokumente
Numerik
Numerik
2
3
4
5
Hinweis zum selbst Testen:
Je nach verwendetem Compiler bzw. zum Einsatz kommender CPU lässt sich der
Effekt u.U. nur mit dem Datentyp float nachvollziehen. Der wahrscheinlichste
Grund dafür wird auf den nächsten Seite erklärt.
6
FPU Floating Point Unit (Gleitkommaprozessor)
7
8
9
http://www.radiomuseum.org/museum/d/tridelta-magnetmuseum-dortmund/.html
10
Der engl. Begriff für Gleitkommazahl ist floating point number.
11
Diese Form der Zahlendarstellung wird manchmal auch als halblogarithmische
Darstellung bezeichnet.
12
13
14
b … Basis
m … Länge (Anzahl der Stellen) der Mantisse
e … Länge (Anzahl der Stellen) des Exponenten
15
16
17
18
19
20
21
22
Im Rechner werden negative Zahlen als sog. Zweierkomplement dargestellt, was
das Rechnen mit ganzen Zahlen deutlich vereinfacht.
23
24
25
26
27
28
29
30
3-stellige Gleitpunktarithmetik bedeutet, dass 2590 dargestellt wird als 0.259∙104
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Das 32-Bit single Gleitkommaformat entspricht dem C bzw. C++-Datentypen
float.
45
46
47
#include <cstdio>
union IEEE_754_Single
{
float Wert;
unsigned Bitmuster;
} Muster;
int main()
{
Muster.Wert = 3.8125;
printf("\n3.8125 in IEEE-754-Darstellung: ");
printBits(Muster.Bitmuster);
return 0;
}
48
49
Abbildung:
https://tip.duke.edu/independent_learning/mathematics/algebra1_online_lesson/Lesson_12.html
50
http://en.cppreference.com/w/cpp/numeric/math/nextafter
51
https://www.inf.ethz.ch/personal/gander/Heisenberg/paper.html
52
Der kleinere Fehler bei der Berechnung auf einem PC resultiert aus der höheren
internen Bitanzahl der Gleitkommawerte in der FPU (Heisenberg-Effekt).
53
Achtung bei Exponentialdarstellungen:
2-15 ≠ 2e-15 !!
2e-15 ist gleichbedeutend mit 2∙10-15
54
55
56
Ein Beispiel auf einem PC:
#include <iostream>
#include <cmath>
int main()
{
cout.precision(18);
Die Werte im Ergebnis unterscheiden sich etwas zu o.a. Beispiel durch die Verwendung
der 64-FPU und der internen Gleitkommadarstellung
57
Δ1f (1, h) wird, wenn Sie das Beispiel der vorigen Seite auf Ihrem Rechner
ausprogrammieren, irgendwann Null werden. Warum ist das so?
Hinweis:
Denken Sie an den maximal auftretenden Fehler bei Rundung.
Sie müssen allerdings auch float überall durch double ersetzen und i etwas
weiter laufen lassen, damit der Effekt auftritt (wegen der internen FPU-
Genauigkeit kann dieses Phänomen mit float nicht erreicht werden).
58
59
60
61
Herleitung des absoluten Fehlers der Multiplikation
𝑥 − 𝑥 𝑦 − 𝑦 = 𝑥𝑦 − 𝑥𝑦 − 𝑥𝑦
+ 𝑥 𝑦 |− 𝑥 − 𝑥 𝑦 − 𝑦
0 = 𝑥𝑦 − 𝑥𝑦 − 𝑥𝑦
+ 𝑥 𝑦 − 𝑥 − 𝑥 𝑦 − 𝑦 |−𝑥 𝑦
−𝑥 𝑦 = 𝑥𝑦 − 𝑥𝑦 − 𝑥𝑦
− 𝑥 − 𝑥 𝑦 − 𝑦 |+𝑥𝑦
𝑥𝑦 − 𝑥 𝑦 = 𝑥𝑦 − 𝑥𝑦 − 𝑥𝑦
+ 𝑥𝑦 − 𝑥 − 𝑥 𝑦 − 𝑦 −𝑥𝑦
+ 𝑥𝑦 → 𝑦(𝑥 − 𝑥)
𝑥𝑦 − 𝑥 𝑦 = 𝑥 𝑦 − 𝑦 + 𝑦 𝑥 − 𝑥 − (𝑥 − 𝑥)(𝑦
− 𝑦)
62
63
64
Man beachte den Unterschied zwischen einer Abschätzung und einer Schätzung.
Eine Abschätzung liefert eine gesicherte Aussage. Eine Schätzung dagegen liefert
eine ungefähre Zahl, die den echten Wert gut wiedergeben kann oder auch nicht.
65
66
67
68
69
70
71
https://xkcd.com/1856/
72
73
74
75
76
77
+∞ wird bei Ausgabe in C dargestellt als inf, in C++ als 1.#INF
−∞ wird bei Ausgabe in C dargestellt als -inf, in C++ als -1.#INF
78
79
80