lehrkraefte:blc:informatik:ffprg1-2020:zahlvar

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:blc:informatik:ffprg1-2020:zahlvar [2021/02/10 20:08]
Ivo Blöchliger [Format-Strings]
lehrkraefte:blc:informatik:ffprg1-2020:zahlvar [2022/02/10 14:54] (current)
Ivo Blöchliger [Rundungsregel]
Line 25: Line 25:
     * %04d  Vier Stellen für Ganzzahl, mit führenden Nullen aufgefüllt.     * %04d  Vier Stellen für Ganzzahl, mit führenden Nullen aufgefüllt.
  
-Es gibt noch viel mehr Möglichkeiten und Varianten. [[https://docs.python.org/2/library/stdtypes.html#string-formatting|Siehe offizelle Dokumentation]]. In Python3 wird zwar eine andere Variante mit ''.format()'' empfohlen. Die hier präsentierte Variante ist aber so in fast allen Programmiersprachen möglich.+Es gibt noch viel mehr Möglichkeiten und Varianten. [[https://docs.python.org/2/library/stdtypes.html#string-formatting|Siehe offizelle Dokumentation]]. In Python3 wird zwar eine andere Variante mit ''.format()'' empfohlen. Die hier präsentierte Variante ist aber so auch in vielen anderen Programmiersprachen möglich, z.B. in C++, die für die Programmierung von Mikrocontrollern sehr populär ist.
  
  
Line 72: Line 72:
 ===== Rundungsregel ===== ===== Rundungsregel =====
 "%.2f" rundet mit der [[https://en.wikipedia.org/wiki/IEEE_754#Rounding_rules|Ties to even rule]], so ergibt z.B. "%.2f" rundet mit der [[https://en.wikipedia.org/wiki/IEEE_754#Rounding_rules|Ties to even rule]], so ergibt z.B.
-  * "%.1f" % 0.25 -> "0.2" +    ''"%.1f" % 0.25 -> "0.2"'' 
-  * "%.1f" % 0.35 -> "0.4" +  * ''"%.1f" % 0.75 -> "0.8"'' 
 +  * Achtung: Viele Zahlen, die mit abbrechenden Dezimalbrüchen dargestellt werden können, können im Binärsystem als Binärbruch nicht abbrechend dargestellt werden (wie z.B. 1/10). Diese Zahlen erscheinen deshalb «zufällig» gerundet. Wie z.B. 
 +    * ''"%.1f" % 0.35 -> "0.3"'' (anstatt 0.4 wie mit der "Ties to even" Regel erwartet). Der Grund ist, dass ''"%.20f" % 0.35 -> "0.34999999999999997780"'' und damit wird abgerundet. 
 +    * ''"%.1f" % 0.65 -> "0.7"'' (anstatt 0.6). Grund ''"%.20f" % 0.65 ->  "0.65000000000000002220"''
 ===== Rechenungenauigkeit ===== ===== Rechenungenauigkeit =====
 Was ist die Ausgabe (10 Summanden 0.1): Was ist die Ausgabe (10 Summanden 0.1):
Line 82: Line 84:
  
 Erklärung: $\frac{1}{10}$ kann im Zweiersystem nicht abbrechend dargestellt werden (wie z.B. $\frac{1}{3}$ im Dezimalsystem). D.h. es werden zwangsläufig Rechenfehler gemacht, die sich aber oft nur auf letzte von ca. 17 Dezimalstellen auswirken. Erklärung: $\frac{1}{10}$ kann im Zweiersystem nicht abbrechend dargestellt werden (wie z.B. $\frac{1}{3}$ im Dezimalsystem). D.h. es werden zwangsläufig Rechenfehler gemacht, die sich aber oft nur auf letzte von ca. 17 Dezimalstellen auswirken.
 +
 +Weitere Beispiele sind folgende, wo 17 Stellen Genauigkeit nicht ausreichen:
 +<code python>
 +print("%f" % 10000000000.2)
 +# produziert 10000000000.200001
 +print("%f" % 100000000000.2)
 +# produziert 100000000000.199997
 +</code>
  • lehrkraefte/blc/informatik/ffprg1-2020/zahlvar.1612984095.txt.gz
  • Last modified: 2021/02/10 20:08
  • by Ivo Blöchliger