Modul Einführung in die Praktische Informatik (EPI ...

64
Prof. Dr. Franziska Matthäus Giersch Professur Zelluläre Bioinformatik Prof. Dr. Matthias Kaschube Computational Neuroscience and Computational Vision Dr. Karsten Tolle Direktor Big Data Lab Modul Einführung in die Praktische Informatik (EPI) Grundlagen der Programmierung (GPR) Teil 5 - Elementare Datentypen III Numerischer Datentyp: Float und Typing allgemein

Transcript of Modul Einführung in die Praktische Informatik (EPI ...

Page 1: Modul Einführung in die Praktische Informatik (EPI ...

Prof. Dr. Franziska Matthäus

Giersch Professur Zelluläre Bioinformatik

Prof. Dr. Matthias Kaschube

Computational Neuroscience and Computational Vision

Dr. Karsten Tolle

Direktor Big Data Lab

Modul Einführung in die Praktische Informatik (EPI)Grundlagen der Programmierung (GPR)

Teil 5 - Elementare Datentypen IIINumerischer Datentyp: Float und Typing allgemein

Page 2: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Teil 5 - Lernziel

§ Das Wandeln von Dezimalzahlen Float lernen

§ Den Datentyp Float in Python genauer kennenlernen

§ The "The Perils of Floating Point" kennenlernen.

§ Besonders wichtig und sehr unterschiedlich in verschiedenen Programmiersprachen ist das sogenannte Typsystem, starke versus schwache Typisierung; statische versus dynamische Typisierung.

Page 3: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten TolleNumerische Datentypen

Gleitpunktzahlen (floating point number)

Page 4: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Gleitpunktzahlen allgemein

Eine Gleitpunktzahl - engl: floating point number(auch: Gleitkommazahl, manchmal auch Fließkommazahl) ist eine halblogarithmische Darstellung)

§ wird oft durch Hardware (floating point unit) unterstützt

§ ist eine (meist approximierte) Kodierung einer reellen Zahl mit einer festgelegten Anzahl von Bits (meist 32 (float), 64(double), selten 16, 128 oder gar 256 Bits).

§ Die Menge der Gleitkommazahlen ist eine endliche Teilmenge der rationalen Zahlen, meist erweitert um einige Spezialwerte (+Unendlich, –Unendlich, NaN (="Not A Number"), –0)

Page 5: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Gleitpunktzahlen (allgemein)

§ Zur Kodierung einer Zahl wird eine Mantisse m und ein Exponent e zu einer bestimmten, festen Basis b benutzt:

(wissenschaftliche Zahlendarstellung)

Mantisse Basis Exponent

§ Eine Zahl wird durch zwei Zahlen m und e so dargestellt, dass a = m · be

gilt. Die Basis b ist eine beliebige natürliche Zahl ≥ 2.

§ Die Zahl m wird Mantisse genannt und ist eine Zahl mit p Stellen (der so genannten Präzision (precision)) der Form ± z0, z-1z-2 ... z-p-1 .

§ Hierbei steht 𝑧! für eine Ziffer zwischen 0 und b – 1. Dezimaltrenner!

𝟖, 𝟒𝟑𝟐 ' 𝟏𝟎𝟐𝟑

Page 6: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Normalisierte vs. normierte Mantisse, Wertebereich

§ Liegt die Mantisse m im Wertebereich 1 < m < b (im Fall b=2 ist die Vorkommazahl 1 (1.xxxx-Form)), so spricht man von einer normalisierten Mantisse.

§ Liegt die Mantisse im Wertebereich 1/b < m < 1 (also im Fall b=2, ist die Vorkommazahl also 0 und die erste Nachkommastelle ist ungleich 0), so spricht man von einer normierten Mantisse (0.xxxx-Form).

§ Gegenüber einer Integerdarstellung kann mit Gleitkommazahlen bei gleichem Speicherplatzbedarf einen viel größerer Wertebereichabgedeckt werden.

§ Beispiel: 32 Bit Zweierkomplement: -2,147·109 ≤ z ≤ 2,147·109

32 Bit Gleitpunktzahl (IEEE 754): -3,403·1038 ≤ z ≤ 3,403·1038

Page 7: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

IEEE 754 und IEEE 754-2008

Das gebräuchlichste und häufig auch durch Hardware unterstützte Format ist in der Norm IEEE 754 (ANSI/IEEE Std 754-1985; IEC-60559 - International version) festgelegt.

IEEE 754-2008 ist eine Revision des IEEE 754 und die heute gültige Norm.

Diese Norm legt u.a. die Standarddarstellungen für binäre Gleitpunktzahlenfest und definiert Verfahren für die Durchführung mathematischer Operationen, insbesondere für Rundungen und das Verhalten an den Grenzen des Wertebereichs.

Beinahe alle modernen Prozessoren unterstützen diesen Standard.

Page 8: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

IEEE 754-2008 definiert folgende Formate

Gleitpunktzahlen mit halber (16 Bit) (Miniformat), einfacher (32 Bit), doppelter (64 Bit – in Python genutzt) und vierfacher (128 Bit) Genauigkeit

Es gibt weitere Zahlendarstellung mit einem ganzzahligen Vielfachen von 32 Bits und größer als 128 Bits.

Dazu kommen:(Quiet) NaN, z.B. komplexe Zahlen oder (Signaling) NaN, z.B. durch Exception, z.B. durch $

$.

Darstellungen von ± ∞ existieren und sind leicht erkennbar.

Page 9: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

IEEE 754-2008

benutzt normalisierte Gleitpunktzahlen (NZ) auf der Basis b = 2.

Das Vorzeichen s = ( − 1)S wird in einem Bit Sdargestellt (S = 0 positive Zahlen und S = 1 negative Zahlen)

Der Exponent e ergibt sich aus der in den Exponentenbits gespeicherten nichtnegativen Binärzahl E durch Subtraktion eines festen Biaswertes B:

e = E − B.

Mantisse im Wertebereich 1 < m < b

(für b=2 ist diealso Vorkommazahl

immer 1)

Page 10: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

IEEE 754 – hier 32 Bit (float, single precision)

Die Mantisse berechnet sich aus den p Mantissenbits M als:m = 1 + M / 2p.

Einfacher ausgedrückt, denkt man sich an das Mantissenbitmuster M links eine 1. angehängt:

Da die Mantisse immer mit 1. beginnt, braucht dieses Bit nicht mehr gespeichert zu werden (hidden Bit). Damit gewinnt man ein zusätzliches Bit „Präzision“. Also:

m = 1.M Mantisses = ( − 1)S Vorzeichene = E − B Exponent

singleprecission„float“

Page 11: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Prinzip der IEEE 754-2008 Floatingpoint-Typen

Exponent mit Vorzeichen)(Exzess 2n-1 )

Nachkommaanteil M der normalisierten Mantisse (1.M)

S

mini 1 5 Bits 10 Bitsfloat 1 8 Bits 23 Bitsdouble 1 11 Bits 52 BitsExtended 1 15 Bits 112 Bits

Python

Vorzeichen1 Bit

Page 12: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Übersicht

Typ Größe Mantisse m

p Mant. bei NZ

Exponent e

emin emaxWerte der Ch. bei NZ

BiasInformationsgehalt in Bit

B16 (Mini)

16 Bit 10 Bit 11 Bit 5 Bit –14 15 1 ≤ E ≤ 30 15 16

b32 (single)

32 Bit 23 Bit 24 Bit 8 Bit –126 127 1 ≤ E ≤ 254 127 32

b64 (double)

64 Bit 52 Bit 53 Bit 11 Bit –1022 1023 1 ≤ E ≤ 2048 1023 64

b128 128 Bit

112 Bit 113 Bit 15 Bit –16382 16383 1 ≤ E ≤ 32766 16383 128

k = 32j, j >= 4

k Bitk - rnd (4 ld (k)) + 12 Bit

k - rnd (4 ld (k)) + 13 Bit

rnd (4 ld (k)) - 13 Bit

1-emax 2^(k-p-1) - 1

emax k

d32 32 Bit 20+ Bit 7 Ziffern 6 Bit –95 96 101 31,83

d64 64 Bit 50+ Bit 16 Ziffern 8 Bit –383 384 398 63,73

d128 128 Bit

110+ Bit 34 Ziffern 12 Bit –6143 6144 6176 127,53

k = 32j, j >= 1

k Bit 15 k/16 -10 Bit

9 k/32 - 2 Ziffern

k/16+4 Bit

1–emax3 2^(k/16+3)

emax + p - 2

d64 64 Bit 50+ Bit 16 Ziffern 8 Bit –383 384 398 63,73

Python

Page 13: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Zusammenfassung

Warum mit Excess kodiert und nicht mit Zweierkomplement?

§ Vergleiche & Operationen (z.B. Addition) gehen mit Verschieben der Mantisse einher.

§ Am Exponenten lässt sich schnell erkennen wohin verschoben werden muss.

Zusammenfassung:Gleitpunktzahlen allgemein sind nichts anderes als die wissenschaftliche Zahlendarstellung, allerdings zur Basis 2 (nicht 10) und in einer speziellen Codierung: die IEEE 754-2008 Norm.

Page 14: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Erste Programmiererfahrungen mit float, Literale und Operatoren

Page 15: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Floating Point Literale in Python

einfache Float: die Kennzeichnung erfolgt durch den Dezimalpunkt:123.4, -42.0, 0., .1

ein kleines e oder ein großes E kennzeichnet eine Zahl in (wissenschaftlicher) Exponentialschreibweise zur Basis 10:

3.11e-8 oder -4E11

Wie bei Integer ist eine Gruppierung der Ziffern zur besseren Lesbarkeit mit _ zugelassen:

4_321.12_34 oder 1.000_01e6

Die Zahlen vor und nach dem e/E werden immer als Dezimalzahlen interpretiert. (Oktalzahlen oder Hexadezimalzahlen sind hier nicht zugelassen!)

Floats in Python sind „Doubles“, also eine 64 Bit Repräsentation.

Page 16: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Es funktionieren alle Operatoren wie bei Integer bis auf die „Bit Manipulatioren“, also

x << y, x >> y, x & y; x ^ y und x | y funktionieren NICHT

Mit X, Y jeweils Float funktionieren:

X // Y Liefert das „ganzzahlige“ Ergebnis einer Division (Vorkommateil – Ergebnis der Form xxx.0). Das Ergebnis ist von Typ float.

X % Y Liefert den „Nachkommateil“ einer Division - Ergebnis der Form 0.xxx als float.

Beispiele:13.0 // 3.2 liefert den Wert 4.013.0 % 3.2 liefert den Wert 0.2 (0.1999999999999993)

Floating Point Operatoren in Python

Page 17: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Wichtige Funktionen für den Typ Float (1):

X, Y, Z seien vom Typ Float.

divmod(X,Y) Ergebnis ist ein Tupel (X // Y, X % Y)

pow(X,Y[,Z]) X zur Potenz Y [modulo Z]

round(X [, N]) Liefert ein float, gerundet auf N Dezimal-Ziffern nach dem Komma. Default N = 0.

int(X) liefert einen Integer-Wert, bei dem die Nach-kommastellen gestrichen wurden (=0 gesetzt).Dasselbe wie math.floor(3.7)liefert 3.

Sowie diverse weitere Built-in-Funktionen, insbesondere auch float(X)…

Page 18: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Wichtige Funktionen für den Typ Float (2):

§ float(X) erzeugt einen Wert vom Typ Float.

§ X kann ein numerischer Wert sein (Integer oder Float) oder ein numerischer String, z.B. float("1.23").

§ Im numerischen String dürfen auch die Sonderwerte Infinitiy oder inf oder nan enthalten sein.

§ Hierbei ist Groß-/Kleinschreibung nicht significant, also "inf", "Inf", "INFINITY" and "iNfINity".

§ Entsprechend "NaN", "nan", "Nan", …

§ Vorzeichen + oder – dürfen am Anfang des Strings stehen.

§ Im math-Modul sind die Konstanten: math.inf und math.nandefiniert und können nach dem import genutzt werden.

Page 19: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Float Sonderwerte in Python: Die Nullen

+0.0-0.0 Im Gegensatz zur Integer -0 wird dies nicht auf 0.0 gecasted.

>>> 4 * (-0.0) liefert -0.0

Aufpassen: Division durch +0.0, 0.0, -0.0 meldet einen ZeroDivisionError.

0.0 oder -0.0 kann durch Unterlauf entstehen: Das Ergebnis ist betragsmäßig zu klein, um als Float dargestellt zu werden.

Page 20: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Unendlich (Infinity) (1)

Wir können auf +∞ oder −∞ mit einer Funktion aus dem math-Modul testen:

Wir können auch auf Endlichkeit (finiteness) testen:

>>> math.isinf(float("inf")) # math-Modul ab Python 3.5+True>>> math.isinf(float("-inf"))True>>> float("inf") == math.infTrue>>> float("-inf") == math.infFalse

>>> math.isfinite(float("-inf"))False>>> math.isfinite(0.0)True

Page 21: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Unendlich (Infinity) (2)

Vergleichsoperatoren arbeiten wie zu erwarten ist:

Wenn ein arithmetischer Ausdruck einen Wert größer als den repräsentierbaren Maximalwert liefert, dann kann Unendlich das Ergebnis sein! (keine Overflow Exception):

>>> import sys>>> sys.float_info.max1.7976931348623157e+308

>>> math.inf > sys.float_info.maxTrue

>>> float("inf") == sys.float_info.max * 1.0000001True

Page 22: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Unendlich (Infinity) (3)

Aufpassen: Eine Division durch Null erzeugt aber einen ZeroDivisionError.

Arithmetische Operationen mit „unendlich ergeben Unendlich oder NaN.

>>> x = 1.0 / 0.0Traceback (most recent call last):File "<pyshell#128>", line 1, in <module>x = 1.0 / 0.0

ZeroDivisionError: float division by zero

-5.0 * math.inf == -math.infTrue>>> -5.0 * -math.inf == math.infTrue>>> math.inf * -math.inf == -math.infTrue>>> 0.0 * math.infnan

Page 23: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Float Sonderwerte in Python: Not a Number (1)

Folgende arithmetische Operationen ergeben „Not a Number (NaN, nan)“

>>> 0.0 * float("inf") # float("inf") erzeugt einen Floatnan # mit dem Wert Unendlich (Infinity)

>>> 0.0 * float("-inf")nan

>>> float("inf") / float("inf")nan

>>> float("inf") / float("-inf")nan

Page 24: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Float Sonderwerte in Python: Not a Number (2)

§ NaN ist nie gleich zu irgendetwas, nicht einmal zu sich selbst. Man kann aber mit einer Funktion aus dem math-Modul auf NaN testen:

§ Arithmetische Operationen mit NaN ergeben immer NaN.

>>> 5.0 + float("NaN")nan

>>> float("NaN") == float("NaN")False>>> import math>>> math.isnan(float("NaN"))True

Page 25: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Zusammenfassung zu Float: Literale und Operatoren

Die Python Implementierung verhält sich ganz überwiegend so, wie es die Norm IEEE 754-2008 vorschreibt.

Auch die Sonderwerte -0.0, NaN und Infinity verhalten sich weitgehend wie erwartet.

Aber man muss trotzdem aufpassen: Denn

§ 0.0 / 0.0 liefert eine Ausnahme (Exception): ZeroDivisionError

§ (-1)**0.5 liefert (6.123233995736766e-17+1j), alsoeine Komplexe Zahl (ein weiterer Basisdatentyp in Python), abgesehen von den Ungenauigkeiten ungefähr den Wert: 0+j, also j: die imaginäre Einheit.

Page 26: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Wandlung von Dezimalzahlen

Page 27: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Algorithmus zum Wandeln: Dezimalzahl è binäre float

Es gibt natürlich viele Möglichkeiten. Wir führen hier nur eine vor.

0. Vorzeichenbit:Negative Zahlen eine Eins als Vorzeichenbit, positive Zahlen eine Null.

1.Mantisse:Wir führen die Rechnung für den Vorkomma-Anteil und Nachkomma-Anteil getrennt aus:

§ Für Nachkommaanteil durch "Kettenmultiplikation"

2. Mantissenteile konkatenieren und in eine 1.xxxxxx-Form verschiebenè wahrer Exponent e Links schieben è negativer Exponent

Rechts: positiver Exponent è positiver Exponent

3. Gespeicherter Exponent E = e + Bias

§ Für Vorkommaanteil durch "Kettendivision"

Page 28: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Beispiel

Wie lautet die 32-Bit-IEEE-Codierung (float) für -42.234375 als Binärvektor?

0. Vorzeichenbit: Negative Zahl è Bit 31 = 1

1. Mantisse

2. Verschieben nach rechts: e = 5 mal: è 1.01010001111

3. Exponent: E = ´101+1111111 = 10000100 (Excess-127!)

42 / 2 = 21 Rest 021 / 2 = 10 Rest 110 / 2 = 5 Rest 05 / 2 = 2 Rest 12 / 2 = 1 Rest 01 /2 = 0 Rest 1

è 101010.

0.234375 * 2 = 0.4687500.46875 * 2 = 0.93750 0.9375 * 2 = 1.8750 0.875 * 2 = 1.7500.75 * 2 = 1.50.5 * 2= 1

001111

Page 29: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Beispiel (Ergebnis)

also:

• 1 10000100 010100011110 … 0

reduzierte MantisseExponent E

Vorzeichen (Sign):

Page 30: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Wandlung: Binäre Floating-point Repräsentation in Dezimalzahl

Vorzeichen

1. wahren Exponent bestimmen

e = E-Bias (=127 für float) (Excess-127)

2. Mantisse M verschieben: è m

3. Aufaddieren gemäß Stellenwert

Page 31: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Mit dem Rechner / Python Interpreter wandeln (für Integer)

Bei Integer war das doch ganz toll: die Dezimalzahl wird als string ausgegeben!

>>> hex(254)'0xfe'>>> oct(254)'0o376'>>> bin(254)'0b11111110'>>> bin(-254)'-0b11111110'

ACHTUNGDies sind nicht die exakten

Repräsentationen im Hauptspeicher, sondern lesbare

Vorzeichenbehaftete Reps(nicht Zweierkomplement!)

Geht das auch für Float?

Page 32: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Jetzt mit dem Rechner / dem Python Interpreter wandeln – float!

Hier gibt es leider nur die hex() Funktion und die Ausgabe ist etwas gewöhnungsbedürftig!

>>> float.hex(3.14159)'0x1.921f9f01b866ep+1‘ # Attention: A string.

>>> 3.14159.hex()'0x1.921f9f01b866ep+1'

>>> float.fromhex('0x1.921f9f01b866ep+1')3.14159

Page 33: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Interpretieren der hex()-Ausgabe für floats

>>> (-1/3.14159).hex()'-0x1.45f318e7adaf5p-2'

Python 3.9 benutzt als float-Repräsen-tation die IEEE 457 b64 (double) … also 1 VZ,52 Bit Mantisse (+ hidden Bit)11 Bit Exponent mit Bias von 1023

VZ

1

E = e+BE = -2+1023=102101111111101

<13*4 Bit Mantisse>4 5 f … 5

010001011111 … 0101

Hidden bit

1.

Page 34: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

… und noch eine interessante Repräsentation

Alle Floats sind rationale Zahlen, also können sie als Bruch, mit ganzzahligen Zähler und Nenner dargestellt werden.

>>> 3.125.as_integer_ratio()(25, 8)

>>> 3.14159.as_integer_ratio()(3537115888337719, 1125899906842624)

Page 35: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Zusammenfassung

§ Wir können beliebige reelle Zahlen meist als Näherung in eine float-Darstellung (rationale Zahl zur Basis 2) wandeln.

§ Die Dichte der Zahlen nimmt bei großen Werten stark ab.

§ Dies hat diverse Konsequenzen und darum müssen wir uns noch kümmern.

Page 36: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

"The Perils of Floating Point"

Page 37: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

„The Perils (Risiken) of Floating Point“ (1) nach dem Paper von Bruce M. Bush (1996)

Gleitpunktzahlen liegen nicht gleich dicht (im gleichen absoluten Abstand) auf dem Zahlenstrahl:

Bei single Precission (32 Bit float) liegen z.B.

§ zwischen 1 und 2 8.388.607 verschiedene Gleitpunktzahlen,

§ zwischen 1023 und 1024 nur 8191 = 210 (weniger als 1%),

§ zwischen 1_048_575 und 1_048_576 = 220 nur noch 15

§ è Ab 224 sind nicht mehr alle Natürlichen Zahlen repräsentierbar.224 = 16.777.216 und 16.777.217 haben dieselbe Repräsentation, nämlich:

0 10010111 00000000000000000000000

Page 38: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

„The Perils (Risiken) of Floating Point“ (2)

Die Dichte der Zahlen auf dem Zahlenstrahl nimmt mit Größe der Zahlen ab.(Weil eben nicht die absolute Genauigkeit konstant ist, sondern die relative, also die Anzahl der signifikanten (=korrekten) Stellen (Precision).)

Die darstellbaren Zahlen liegen nicht dicht auf dem Zahlenstrahl, hier für eine 3 Bit Mantisse, sie verhalten sich also nicht wie reelle Zahlen.

e = 0e = -1e = -2

Page 39: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Die Präzision von "double" Gleitpunktzahlen

Was braucht man realistischerweise?

1. Entfernung Erde-Mond oder Erde-Mars auf den Meter genau?

Erde-Mond: 384.400 km = 384.400.000 m, also 9 Dezimalstellen in mErde-Mars: 225.300.000 km = 225.300.000.000 m also 12 Dez-StellenErde-Pluto: 4.275-7.525*106 km ≈ 13 Dezimalstellen.

2. Umsatz eines Weltkonzerns auf den Cent genau berechnen?

Facebook 12.466 Mio. US-Dollar (2014) in US-Cent: 1.246.600.000.000, also 13 Dezimalstellen.

Walmart 476.294 Mio US-Dollar (2013) in US-Cent: 47.629.400.000.000 Also 14 Dezimalstellen (weltweit umsatzstärkstes Unternehmen 2013)

Page 40: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Welche Präzision haben "double" Gleitpunktzahlen?

Entscheidend ist die Anzahl der Mantissenbits: bei 'double' sind das:

§ 52+1 Bit (wg. Normalisierung, d.h. die Mantisse ist 1.xyxyx)

in Dezimalstellen:

§ 53 (Bit) / log2 10 Dezimalstellen = 53/3.322=15,955 Dezimalstellen, also fast 16 Dezimalstellen

§ Also: es ist doch alles gut:

… , was wollen wir mehr?

Wir können Abstände zum Mars auf einen Meter genau bestimmen, die Controller können den Umsatz von Walmart auf den Cent genau bestimmen, … was ist das Problem?

Page 41: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Probleme beim Rechnen mit Floats

>>> (1 + 1e15 - 1e15)1.0

>>> (1 + 1e16 - 1e16)0.0

>>> 0.1 + 0.20.30000000000000004

>>> .1 + .1 + .1 == .3False

Das müssen wir uns etwa genauer anschauen!

Page 42: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Zahlen verschiedener Größenordnung (Absorption)

Vorsicht: Die Addition bzw. Subtraktion einer betragsmäßig viel kleineren Zahl ändert die größere Zahl nicht. Dies nennt man Absorption.

>>> (1 + 1e16 + 1 - 1e16) # Die Eins ist zu klein! 0.0>>> (1 + 1e15 + 1 - 1e15) # Präzisionsgrenze!2.0>>> 1.0 - 1e-171.0>>> 1.0 - 1e-160.9999999999999999>>> 2.0 - 1e-162.0

Page 43: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Auslöschung (Cancellation)

Bemerkenswerte falsche Ziffern schon an der 14. Dezimalstelle.

Vorsicht: Unter Auslöschung (cancellation) versteht man den Effekt, dass bei der Subtraktion fast gleich großer Zahlen das Ergebnis viel ungenauer wird, als die Präzision.

>>> 2.2-20.20000000000000018

>>> 1000.2 - 10000.20000000000004547

Page 44: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Vergleiche auf gleichen Wert sind fast immer falsch!

Anstelle des == benutzen Sie bitte (nach import math)math.isclose()

>>> .1 + .1 + .1 == .3False>>> abs((.1 + .1 + .1) - .3) < 1e-16True>>> abs((.1 + .1 + .1) - .3) < 1e-17 # nicht optimalFalse

>>> import math>>> math.isclose(.1 + .1 + .1, 0.3) # ist richtig!True

Page 45: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Sicheres Vergleichen von Float-Values in Python

help(math.isclose)isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0) -> bool

Bestimmt ob zwei Floats ähnliche Werte aufweisen:

§ rel_tol: Maximaldifferenz um als ähnlich zu gelten, relativ zur Grössenordnung der Inputwerte

§ abs_tol: Maximaldifferenz um als ähnlich zu gelten, Absolutwert, unabhängig von der Grössenordnung der Inputwerte

Ergibt True wenn a ist ähnlich zu b, sonst False.

Damit die Werte als ähnlich gelten, muss die Differenz zwischen ihnen kleiner sein als mindestens einer der zwei gegebenen Werte.

Page 46: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0) -> bool

inf, -inf und NaN verhalten sich ähnlich dem IEEE 754 Standard. § NaN ist zu nichts ähnlich, nicht mal sich selbst§ inf und -inf sind nur sich selbst ähnlich

Definition Ähnlichkeit è Numerik (2. oder 3. Semester in “Analysis und Numerische Mathematik für die Informatik“).

Sicheres Vergleichen von Float-Values in Python

Page 47: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Was Python sonst noch so hat:

Python 3 besitzt drei weitere interessante Datentypen (Import notwendig)

§ decimal — Decimal fixed point and floating point arithmetic Modul(arbeiten mit bestimmter Anzahl an Dezimalstellen: höhere Genauigkeit aber langsamer als Float)

und einen

§ fractions — Rational numbers Modul.(wandelt in rationale Zahl um und rechnet damit, auch höhere Laufzeit als Float)

§ complex — Complex numbers (built-in)

Page 48: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Noch ein Beispiel

>>> round(1.5)2>>> round(2.5)2>>> round(3.5)4>>> round(4.5)4>>> round(5.5)6>>> round(6.5)6

>>> round(0.5)0>>> round(-0.5)0>>> round(-0.5,0)-0.0

→ Darstellbare Floats liegen knapp über oder unter der Zahl.

→ Aufpassen beim Runden von Floats

Page 49: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Zusammenfassung: VORSICHT beim Programmieren mit float

§ Die Präzision der Float Darstellungen sind begrenzt!

§ Bei Python (64 Bit double) ist dies:- maximal 17 Bit- durch (mehrfache) Absorption und Cancellation kann dieses erheblich

sinken è einigermaßen sicher sind 9 Stellen!- ggf. saubere Fehlerabschätzung notwendig! è Numerik

§ Wandlungsfehler treten bei (fast) jeder Wandlung vom Dezimalsystem ins Binärsystem und vice versa auf.

§ Vorsicht bei Subtraktionen (und ggf. auch Additionen), sie können sehrschnell die Präzision des Ergebnisses reduzieren.

§ Vergleiche mit Floats generell kritisch!

§ Nur sichere Vergleiche (mit Epsilon) oder math.isclose() nutzen!

Page 50: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Typisierung

Page 51: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Typisierung

Beispiel:X = ‚ANTON’ Y = ‚ & ’Z = ‚BERTA’. U = X + Y + Z

arithmetisch interpretiert macht das keinen Sinn, erst recht nicht, dieses auf Datenebene plump zu errechnen.

Vielmehr bedeutet der Operator + bei Zeichenketten eine Aneinanderreihung (Konkatenation), also

U = ‚ANTON & BERTA’

Page 52: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Datentypen

§ Die Bedeutung von Operatoren in Ausdrücken hängt von der Art (=dem Typ (type)) der Daten ab.

§ Gleiche Operatorenzeichen (z.B, +) können abhängig vom Datentyp durchaus Verschiedenes bedeuten.

§ Ein Datentyp in der Informatik ist die Zusammenfassung von Objektmengen mit den darauf definierten Operationen.

§ Vom Grundsatz her dürfen nur gleiche Datentypen miteinander verknüpft werden! (è starke Typisierung).

§ In Python ist dann auch das Ergebnis vom selben Typ (è dynamische Typisierung).

Page 53: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Beispiel (1):

2 + 3.5 + '0001'

Wir als Mensch interpretieren vermutlich:

2.0 + 3.5 + 1.0 = 6.5 (als Gleitpunktzahl)

Aber warum nicht:

'2' + '3.5' + '0001' = '23.50001' (als String) interpretieren?

Also: Es ist entscheidend wichtig, den Typ der Operanden zu kennen!

Page 54: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Beispiel (2)

a = 2 # Integer 32 bitc = '0001' # String 4 byte = 32 bitb = 3.5 # Float 64 bit

Diese drei Variablen könnten im Speicher etwa wie folgt repräsentiert sein:

a è 00000002 32-Bit Integer-Kodierung für 2c è 30303031 ASCII-Kodierung für den String '0001'b è 400C0000 64-Bit Float-Kodierung für 3.5

00000000

a als Float interpretiert, so hätte a den Wert 4.643426084·10-314,

c als Float interpretiert, so hätte c den Wert 1.39804468550329·10-76,

b als Integer interpretiert, so hätte es den Wert 1.074.528.256

Page 55: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Beispiel (3)

Achtung: Bei der Division von Integer-Zahlen entstehen Brüche (è float), z.B.

7 / 2 = 3 ½ oder 3.5 (float) aber 6 / 2 = 3.0 (float)

In der Mathematik führen wir diese „Coercion“ automatisch durch.In Python (ab Version 3.X) auch!

Aber es gibt auch die ganzzahlige Division:7 // 2 = 3

werden float, wenn einer derUnd die Modulo-Divison (Rest): Operanden float ist

7 % 2 = 1

Page 56: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Also:

Es ist daher offensichtlich, dass es gilt, mögliche Programmierfehler so früh wie möglich zu entdecken. Hierzu unterscheiden wir:

starke Typisierung - schwache Typisierung (strong typing) (weak typing)

dynamische Typisierung - statische Typisierung(dynamic typing) (static typing)

Python

Page 57: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Starke Typisierung

Bei der starken Typisierung (strong typing oder strengen, strikten Typisierung) bleibt eine einmal durchgeführte Bindung zwischen Variable und Datentyp in jedem Fall bestehen. Eine nicht stark typisierte Sprache bezeichnet man als schwach typisiert.

§ stark typisierte Sprachen: Java, Python, Pascal

§ schwach typisierte Sprachen: C / C++, PHP, Perl, JavaScript

§ Starke Typisierung schützt vor vielen Programmierfehlern!

Page 58: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Dynamische versus statische Typisierung

§ dynamischen Typisierung (engl. dynamic typing) erfolgt die Typzuweisung der Variablen zur Laufzeit eines Programms (Bindung), z.B. durch eine Zuweisung.

§ Dies erspart es dem Programmierer, die Typisierung „von Hand“ durch eine Deklaration durchführen zu müssen.

§ Bei der statischen Typisierung muss zur Übersetzungszeit der Datentyp von Variablen bekannt sein. Dies erfolgt in der Regel durch Deklaration.

§ Unter Deklaration versteht man die Festlegung von Bezeichner, Datentyp, Dimension und weiteren Aspekten einer Variablen.

Page 59: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Casting und Coercion

§ implizite Typkonvertierung oder coercion (engl. Nötigung, Zwang)

§ explizite Typkonvertierung oder cast(ing) (engl eingießen, formen, werfen, …)

§ Coercion finden wir sehr häufig bei Zahlen, also:

Integer è Float è Complex

Wie in der Mathematik... Trotzdem Vorsicht!

Page 60: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

„Echte“ Casting-Funktionen in Python

Ziel-Typ (Kürzel) Konvertierungsfunktionen (Quelle)Integer (int) int(O)Float (float) float(O)Complex (complex) complex(O)Boolean (bool) bool(O)String (str) str(O)

repr(O)ascii(O)B.decode(encoding='utf-8')

Ziel-Typ ist der Funktionsname!

O: (beliebiges) Objekt

O: String

Übrigens: Was macht Python bei int(3.7)int('3.7') und bei int(True)

3Value Error1

Page 61: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Spezielle Castings Integer String

§ chr(int) und ord(C) sind echte „Gegenspieler“ (Umkehrfunktionen). § Der Wert des Integer entspricht dem Unicode-Codepoint.§ „Gegenspieler“ sind auch hex(int), oct(int),bin(int) und int(str[,basis=10])

Ziel-Typ (Kürzel) Konvertierungsfunktionen (Quelle)Integer (int) int(str[,basis=10])

ord(C)String (str) hex(int)

oct(int)bin(int)chr(int)

C: „Character“ = ein-elementiger „String“

int: Integer

S: String

Page 62: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Weitere „echte“ Casting-Funktionen (Nur zur Vollständigkeit.)

§ Casting-Funktionen auch für zusammen-gesetzte Datentypen, die wir noch nicht besprochen haben (Set, Tupel, Listen).

§ Ganz einfach: Ziel-Typ ist der Funktionsname!

§ iterable: Ein Objekt, dass die Methode __iter__ hat:

§ 1) Wenn der Typ des Argumentes = S ist, dann muss auch ein encoding angegeben werden.

Ziel-Typ (Kürzel) Konvertierungsfunktionen (Quelle)String (str) B.decode(encoding='utf-8')Bytes (bytes) 1) bytes(S or iterable)

S.encode(encoding='utf-8')Bytearray 1) bytearray(S or iterable)

Frozenset frozenset(iterable)Set set(iterable)Tupel tupel(iterable)List list(iterable)

S: String

Page 63: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Zusammenfassung

§ Floats werden über die Exponentialschreibweise dargestellt

§ Vorzeichen, Mantisse und Exponent werden in standardisierten Bereichen des Bitvektors gespeichert

§ Die Präzision ist begrenzt, die Zahlendichte nimmt mit Grösse der Zahlen ab

§ Mathematische Operationen verringern die Präzision zusätzlich

§ Aufpassen beim Verrechnen von sehr unterschiedlichen Zahlen und beim Vergleichen von Floats.

𝟖, 𝟒𝟑𝟐 & 𝟏𝟎𝟐𝟑

Page 64: Modul Einführung in die Praktische Informatik (EPI ...

Einführung in die Praktische Informatik (EPI)

Grundlagen der Programmierung

Teil 5 Elementare Datentypen - III

Prof. Dr. Matthias KaschubeProf. Dr. Franziska MatthäusDr. Karsten Tolle

Ausblick

Nächste Woche: Software Tests

bis dahin

Auf Wiedersehen!