Fliesskommazahlen Flashcards

Typen 𝚏𝚕𝚘𝚊𝚝 und 𝚍𝚘𝚞𝚋𝚕𝚎; Gemischte Ausdrücke und Konversionen; Löcher im Wertebereich; Fliesskommasysteme; IEEE-Standart; Grenzen der Arithmetik; Richtlinien;

1
Q

Wie unterscheiden sich Fliess- von Fixkommazahlen? Was sind die Vorteile von Fliesskommazahlen gegenüber den Fixkommazahlen?

A

Fixkommazahlen haben eine feste Anzahl vor- und Nachkommastellen. Der Wertebereich wird somit noch kleiner als bei ganzen Zahlen, da ab mehr als 10 Stellen alles hintendran weggekürzt wird. Die Repäsentierbarkeit hängt also von der Stelle des Kommas ab.
Bei Fliesskommazahlen hingegen bleibt die Anzahl signifikanter Stellen konstant, z.B. 0.0824 = 8.24 * 10⁻². Die verfügbaren Stellen werden also nicht für Nullen vergeudet und sind daher präziser.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Was sind die Typen 𝚏𝚕𝚘𝚊𝚝 und 𝚍𝚘𝚞𝚋𝚕𝚎? Wofür werden sie gebraucht?
Tipp: 4 Eigenschaften

A
  • Fundamentale C++-Typen für Fliesskommazahlen.
  • Approximieren den Körper der reellen Zahlen (ℝ, +, *).
  • Haben grossen Wertebereich.
  • Sind auf den meisten Rechnern sehr schnell.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Wie gross sind die Wertebereiche von 𝚏𝚕𝚘𝚊𝚝 und 𝚍𝚘𝚞𝚋𝚕𝚎?

A

𝚏𝚕𝚘𝚊𝚝: ca. 7 Stellen, Exponent bis ± 38

𝚍𝚘𝚞𝚋𝚕𝚎: ca. 15 Stellen, Exponent bis ± 308 .

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Wie unterscheidet sich der Wertebereich von 𝚏𝚕𝚘𝚊𝚝 und 𝚍𝚘𝚞𝚋𝚕𝚎 gegenüber dem von 𝚒𝚗𝚝?
Was sind Vor- und Nachteile der beiden Typen?

A

Ganzzahlige Typen (𝚒𝚗𝚝):

  • Über- und Unterlauf häufig, aber…
  • Wertebereich ist zusammenhängend (keine Löcher): “ℤ ist diskret.”

Fliesskommatypen (𝚏𝚕𝚘𝚊𝚝, 𝚍𝚘𝚞𝚋𝚕𝚎):

  • Über- und Unterlauf selten, aber…
  • Es gibt Löcher: ℝ ist “kontinuierlich”.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Wie unterscheiden sich die arithmetischen Operatoren bei 𝚏𝚕𝚘𝚊𝚝 und 𝚍𝚘𝚞𝚋𝚕𝚎 von 𝚒𝚗𝚝?

A

Die meisten Operationen sind gleich wie bei 𝚒𝚗𝚝. Der Divisionsoperator jedoch modelliert “echte”, nicht ganzzahlige Division. Folglich existiert auch kein Modulo-Operator.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Wie würde man die Zahlen 1.234 und 0.0001234 für Typen 𝚏𝚕𝚘𝚊𝚝 und 𝚍𝚘𝚞𝚋𝚕𝚎 eingeben?

A

Geht sowohl mit Dezimalkomma als auch mit Exponent. Geeigneter wären jeweils: 𝟷.𝟸𝟹𝟺 bzw. 𝟷.𝟸𝟹𝟺𝚏 (float) sowie 𝟷.𝟸𝟹𝟺𝚎-𝟺 bzw. 𝟷.𝟸𝟹𝟺𝚎-𝟺𝚏 (float).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Wie ist ein Fliesskommasystem definiert?

A

Ein Fliesskommazahlensystem F ist durch vier natürliche Zahlen gegeben:

F (β, p, e(min), e(max)), wobei:

  • β ≥ 2, die Basis.
  • p ≥ 1, die Präzision (Stellenanzahl).
  • e(min), der kleinste Exponent.
  • e(max), der grösste Exponent.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Welche Zahlen enthält ein Fliesskommasystem F? Wie stellt man sie zu einer Basis β dar?

A

F: ± Σᵖ⁻¹ᵢ₌₀ (dᵢβ⁻ᶦ * βᵉ),
für dᵢ ∈ {0, …, β-1} und e ∈ {e(min), …, e(max)}.

In Basis-β-Darstellung:
± d₀ , d₁d₂…dₚ₋₁ * βᵉ
(Man kann sich die dᵢ als einzelne Stellen / Ziffern der ganzen Zahl vorstellen.)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Was ist die normalisierte Darstellung einer Zahl im binären Fliesskommasystem?

A

In der normalisierten Darstellung
± d₀ , d₁d₂…dₚ₋₁ * βᵉ für d₀ ≠ 0
wird immer eine Ziffer (in Binär also die 1) vor das Komma gesetzt und die Zahl dann mit dem passenden Exponenten multipliziert, z.B. für die Zahl 0.625 im Dezimalsystem würde man im Binärsystem nicht 0.𝟷0𝟷 schreiben sondern 𝟷.0𝟷𝚎-𝟷.
Die normalisierte Darstellung ist eindeutig und deshalb zu bevorzugen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Wie rechnet man 1.1₁₀ ins Binärzahlensystem um?

A
Wir subtrahieren von 1.1 die ganzzahligen Einheiten, die in 1.1 enthalten sind (also 1), multiplizieren den Rest mit 2 und führen die Kette so fort:
1.1   -  1 =  0.1;   0.1 * 2 = 0.2;
0.2 - 0 = 0.2; 0.2 * 2 = 0.4;
0.4 - 0 = 0.4; 0.4 * 2 = 0.8;
0.8 - 0 = 0.8; 0.8 * 2 =  1.6;
1.6  -  1 = 0.6; 0.6 * 2 =  1.2;
1.2  -  1 = 0.2; 0.2 * 2 = 0.4; 
(ab hier wird die Kette periodisch).
Nun setzen wir nach der ersten Zahl ein Komma und erhalten: 1.0¯0011 ("1.0 Periode 0011")
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Weswegen erhält man vom Computer für die Subtraktion zweier Fliesskommazahlen 𝟷.𝟷𝚏 - 𝟷.0𝚏 nicht 0.𝟷, sondern eine “willkürliche” kleine Zahl?

A

Da 𝟷.𝟷𝚏 und 0.𝟷𝚏 nicht gleich 1.1 und 0.1 sind, sondern geringfügig fehlerhafte Approximationen dieser Zahlen. Dies folgt aus den periodischen bzw. nicht abbrechenden Eigenschaften einer ins Binärsystem konvertierten Zahl.
𝟷.𝟷 (double) wäre 1.1000000000000000888178… und 𝟷.𝟷𝚏 wäre 1.1000000238418… .

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Berechne für ein Fliesskommasystem F(β = 2, p = 4) folgende Addition:
1.111 * 2⁻² + 1.011 * 2⁻¹
Was sind die Schritte?

A

Zuerst Exponenten anpassen für 2⁰:

  1. 111 * 2⁻² = 0.01111 * 2⁰
  2. 011 * 2⁻¹ = 0.1011 * 2⁰

Nun kann man diese beiden Werte addieren und erhält:
0.01111 + 0.1011 = 1.0001

Da p = 4, müssen wir die Zahl auf die nächste darstellbare Zahl mit p signifikanten Stellen runden, also 1.001, was das Ergebnis ist.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

In welche drei Teile zerlegt sich eine Fliesskommazahl in der Computerdarstellung? Was für normalisierte Fliesskommasysteme F* folgen daraus für ein 32-Bit- und ein 64-Bit-System?

A

Vorzeichen, Exponent und Mantisse (den Signifikanden).
Bei 32-Bit: 1 Bit Vorzeichen, 8 Bits Exponent, 23 Bit Mantisse. Daraus folgt: F(2, 24, -126, 127).
Bei 64-Bit: 1 Bit Vorzeichen, 11 Bits Exponent, 52 Bit Mantisse. Daraus folgt: F
(2, 53, -1022, 1023).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Betrachte folgenden Programmausschnitt:

𝚏𝚘𝚛 (𝚏𝚕𝚘𝚊𝚝 𝚒 = 0.𝟷; 𝚒 != 𝟷.0; 𝚒 += 0.𝟷)
𝚜𝚝𝚍::𝚌𝚘𝚞𝚝 &laquo_space;𝚒 &laquo_space;“\𝚗”;

Wo liegt hier das Problem?

A

Da i niemals exakt 1 ist, wird dies eine Endlosschleife werden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Betrachte die Addition: 1.000 * 2⁵ + 1.000 * 2⁰. Wo liegt das Problem? Was wird das Ergebnis sein?

A

1.000 * 2⁵ + 1.000 * 2⁰ = 1.00001 * 2⁵.
Da jedoch p = 4 für die ersten beiden Zahlen, wird auch das Ergebnis auf 4 Stellen gerundet, und man erhält: 1.000 * 2⁵. Die Addition hat also keinen Effekt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Betrachte die Subtraktion 0.10100001 - 0.1010. Wo könnte hier ein Problem entstehen?

A

Je nach Präzision könnte sich die Subtraktion gegenseitig auslöschen (“Cancellation”), sprich:
0.10100001 - 0.1010 = 0.00000001. Ist p > 9, so ist das Resultat einfach 0, die weniger signifikanten Stellen werden also weggelöscht.

17
Q

Welches sind die drei Richtlinien für arithmetische Operationen mit Fliesskommazahlen?

A

(1) Teste keine gerundeten Fliesskommazahlen auf Gleichheit.
(2) Addiere keine zwei Zahlen sehr unterschiedlicher Grösse.
(3) Subtrahiere keine zwei Zahlen sehr ähnlicher Grösse.