Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
ef_informatik:zahlensysteme [2024-08-20 11:44] – [Dezimalzahlen mit Nachkommastellen] sca | ef_informatik:zahlensysteme [2024-08-27 12:40] (aktuell) – [Weitere Aufgaben] sps | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== - Zahlensysteme & Datentypen ====== | ====== - Zahlensysteme & Datentypen ====== | ||
+ | |||
+ | ++++Lernziele| | ||
+ | |||
+ | Grundsätzlich kann alles bis und mit Kapitel " | ||
+ | |||
+ | * Wissen, warum Datentypen wichtig sind in C Sprachen. | ||
+ | * Dynamische und statische Typisierung vergleichen. Vor- und Nachteile? | ||
+ | * Zahlen in wissenschaftlicher Schreibweise darstellen. | ||
+ | * Umwandlung von ganzen Zahlen (ints) dezimal <-> binär | ||
+ | * Binärzahl in Gleitkommadarstellung bringen ... | ||
+ | * ... und zugehörige Fachbegriffe (Mantisse, ...) erklären können. | ||
+ | * Umwandlung von Gleitkommazahlen dezimal <-> binär | ||
+ | * Umwandlung Gleitkommadarstellung in Binärzahl oder Dezimalzahl | ||
+ | * Sonderfälle für binäre Gleitkommazahlen kennen und verstehen. | ||
+ | * Binäre floats addieren können. | ||
+ | * Codes zu den obigen Punkten verfassen können in Python oder C#. | ||
+ | |||
+ | ++++ | ||
+ | |||
+ | ++++Praktische Python Befehle| | ||
+ | |||
+ | <code python> | ||
+ | # Length | ||
+ | len(" | ||
+ | |||
+ | # Data types | ||
+ | str(42) | ||
+ | int(" | ||
+ | float(13) | ||
+ | type(42) | ||
+ | bin(132) | ||
+ | |||
+ | # Strings | ||
+ | s = "ich bin ein String" | ||
+ | s[2:] | ||
+ | s[4:7] | ||
+ | s[:5] | ||
+ | s.replace(' | ||
+ | li = s.split(' | ||
+ | s.strip(" | ||
+ | s.lstrip(" | ||
+ | s.rstrip(" | ||
+ | s = s.upper() | ||
+ | s = s.lower() | ||
+ | s.find(" | ||
+ | many_zeros_string = " | ||
+ | |||
+ | ## TIPP: In diesem Thema bietet es sich meist an, mit Strings anstelle Listen zu arbeiten. Sollte man aber das Bedürfnis nach Listen haben, hier die wichtigsten Befehle: | ||
+ | li = [' | ||
+ | len(li) | ||
+ | li.append(' | ||
+ | li.pop(2) | ||
+ | li.remove(' | ||
+ | print(li) | ||
+ | </ | ||
+ | |||
+ | ++++ | ||
===== - Voraussetzungen ===== | ===== - Voraussetzungen ===== | ||
Zeile 283: | Zeile 340: | ||
<nodisp 1> | <nodisp 1> | ||
++++Lösung| | ++++Lösung| | ||
+ | |||
+ | <code python> | ||
+ | def binary_string_to_float(bin_str, | ||
+ | # SIGN | ||
+ | sign = ' | ||
+ | if bin_str[0] == ' | ||
+ | |||
+ | # SPECIAL CASE: ZERO | ||
+ | if ' | ||
+ | |||
+ | # TODO: other special cases (too small, too big, nan) | ||
+ | |||
+ | # if int convert into float | ||
+ | if not ' | ||
+ | |||
+ | # EXPONENT, MANTISSA | ||
+ | bin_str = bin_str.lstrip(' | ||
+ | bias = (2**len_exp - 2)//2 | ||
+ | mantissa = bin_str | ||
+ | |||
+ | # determine exponent | ||
+ | i_one = bin_str.find(' | ||
+ | i_point = bin_str.find(' | ||
+ | exponent = i_point - i_one | ||
+ | if exponent > 0: exponent -= 1 | ||
+ | |||
+ | # remove point from mantissa | ||
+ | if ' | ||
+ | |||
+ | # add bias to exponent | ||
+ | exp_w_bias = bin(exponent+bias)[2: | ||
+ | exp_w_bias = ' | ||
+ | if len(exp_w_bias) > len_exp: | ||
+ | return [sign,' | ||
+ | | ||
+ | # normalize mantissa | ||
+ | mantissa = mantissa.lstrip(' | ||
+ | mantissa_normalized = mantissa[1:: | ||
+ | # ensure mantissa has correct length | ||
+ | if len(mantissa_normalized) > len_mant: | ||
+ | mantissa_normalized = mantissa_normalized[0: | ||
+ | else: | ||
+ | mantissa_normalized += ' | ||
+ | |||
+ | # TODO: round mantissa correctly | ||
+ | | ||
+ | return [sign, | ||
+ | </ | ||
+ | |||
++++ | ++++ | ||
</ | </ | ||
Zeile 303: | Zeile 409: | ||
* $42\_{10} = 101010\_2$ | * $42\_{10} = 101010\_2$ | ||
- | * $0.375_{10} = 0.011$2 | + | * $0.375_{10} = 0.011\_2$ |
Es gilt also $$42.375_{10} = 101010.011_2$$ | Es gilt also $$42.375_{10} = 101010.011_2$$ | ||
Zeile 318: | Zeile 424: | ||
1. $0.0001\_2$ weil $\cfrac{1}{16} = 2^{-4}$ | 1. $0.0001\_2$ weil $\cfrac{1}{16} = 2^{-4}$ | ||
- | 1. $0.1001_2$ | + | 1. $0.1001\_2$ |
- | 1. $1011010.01_2$ | + | 1. $1011010.01\_2$ |
- | 1. $.0110101110\ldots_2$ (geht noch weiter, nach 10 NKS abgebrochen) | + | 1. $.0110101110\ldots\_2$ (geht noch weiter, nach 10 NKS abgebrochen) |
++++ | ++++ | ||
Zeile 351: | Zeile 457: | ||
<box 100%> | <box 100%> | ||
- | **Aufgabe:** Schreibe eine Funktion z.B. in Python, mit der man ... | + | <color magenta>**Programmieraufgabe:**</ |
- | 1. Ganze Dezimalzahlen ins Binärsystem umrechnet. Repetition, implementiere selbst den Restwertalgorithmus und verwende nicht z.B. `bin(...)`. | + | 1. Ganze Dezimalzahlen ins Binärsystem umrechnet. Repetition, implementiere selbst den Restwertalgorithmus und verwende nicht z.B. `bin(...)`.\\ \\ |
- | 1. Kleine Dezimalzahlen ($0 < a < 1$, haben also Form $0.< | + | 1. Kleine Dezimalzahlen ($0 < a < 1$, haben also Form $0.< |
1. Beliebige Dezimalzahlen, | 1. Beliebige Dezimalzahlen, | ||
++++Lösung| | ++++Lösung| | ||
- | |||
Zeile 364: | Zeile 469: | ||
</ | </ | ||
- | ===== Zusatzaufgaben | + | ===== Weitere Aufgaben |
<box 100%> | <box 100%> | ||
Zeile 465: | Zeile 570: | ||
* Exponenten ermitteln | * Exponenten ermitteln | ||
* Mantissen ermitteln | * Mantissen ermitteln | ||
- | * Exponenten angleichen, Komma der Mantissen entsprechend verschieben. Bias beibehalten | + | * Exponenten angleichen, Komma der Mantissen entsprechend verschieben. Bias beibehalten. |
* Addition durchführen | * Addition durchführen | ||
* Komma verschieben, | * Komma verschieben, | ||
Zeile 499: | Zeile 604: | ||
**Aufgabe: | **Aufgabe: | ||
- | 1. Bestimme die grösste und zweitgrösste Zahl, die man in einem C\#-Float (8-Bit Exponent, 23-Bit Mantisse). Verwende Python.\\ \\ | + | 1. Bestimme die grösste und zweitgrösste Zahl, die man in einem C\#-Float (8-Bit Exponent, 23-Bit Mantisse) |
1. Wie gross ist die Differenz? Verwende Python.\\ \\ | 1. Wie gross ist die Differenz? Verwende Python.\\ \\ | ||
1. Überzeuge dich davon, dass C\# nicht zwischen der grössten Zahl und zwischen einer Zahl, die in diesem Gap liegt, unterscheiden kann, zum Beispiel indem du diese von einander subtrahierst. Python hingegen hat da keine Probleme.\\ | 1. Überzeuge dich davon, dass C\# nicht zwischen der grössten Zahl und zwischen einer Zahl, die in diesem Gap liegt, unterscheiden kann, zum Beispiel indem du diese von einander subtrahierst. Python hingegen hat da keine Probleme.\\ |