Gleitkommazahlen in Python
Gleitkommazahlen - korrekt / nicht korrekt dargestellt
Gleitkommazahlen kann man in Python auf vielerelei Weisen darstellen. Man kann dabei aber auch Fehler machen.
Aufgabe 1
(a) Ordne die Beispiele in der LearningApp unter der Aufgabe passend zu.
(b) Kannst du bei den fehlerhaften Gleitkommazahlen sogar erklären, wo der Fehler liegt?
Quelle: LearningApps
Hinweis zur Darstellung mit Exponenten
Man darf das „e“ in Python auch großschreiben. Für die weitere Betrachtung gehen wir meistens von einem kleinen „e“ aus, damit wir keine Verwirrung mit Terminal- und Nichtterminalsymbolen stiften.
Die Sprache der Python-Gleitkommazahlen
Die Sprache der Python-Gleitkommazahlen lässt sich wie folgt mit Syntaxdiagrammen präzise beschreiben.
floatnumber:
pointfloat:
exponentfloat:
intpart:
fraction:
exponent:
digit:
Passend zu diesen Syntaxdiagrammen kann man die Sprache der Python-Gleitkommazahlen mit einer Grammatik präzisieren.
Grammatikregeln - in EBNF | Grammatikregeln - als Produktionen |
---|---|
floatnumber ::= pointfloat | exponentfloat |
floatnumber -> pointfloat floatnumber -> exponentfloat |
pointfloat ::= [intpart] fraction | intpart "." |
pointfloat -> fraction pointfloat -> intpart fraction pointfloat -> intpart "." |
exponentfloat ::= (intpart | pointfloat) exponent |
exponentfloat -> intpart exponent exponentfloat -> pointfloat exponent |
intpart ::= digit+ |
intpart -> digit intpart -> digit intpart |
fraction ::= "." digit+ |
fraction -> "." intpart |
exponent ::= ("e" | "E") ["+" | "-"] digit+ |
exponent -> "e" intpart exponent -> "E" intpart exponent -> "e" "+" intpart exponent -> "E" "+" intpart exponent -> "e" "-" intpart exponent -> "E" "-" intpart |
digit ::= "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9" |
digit -> "0" digit -> "1" digit -> "2" digit -> "3" digit -> "4" digit -> "5" digit -> "6" digit -> "7" digit -> "8" digit -> "9" |
Spracherkennung mit Hilfe von Produktionen
Wenn man mit dem Startsymbol beginnt, dann kann man durch einen sukzessiven Ersetzungsprozess jede Python-Gleitkommazahl mit den Produktionen der Grammatik ableiten.
floatnumber -> pointfloat -> fraction -> "." intpart -> "." digit intpart -> "." digit digit -> "." "1" digit -> "." "1" "4"
Aufgabe 2
Zeige entsprechend, dass die Zeichenkette 21.
mit den Ersetzungsregeln
erzeugt werden kann.