Archiv der Kategorie: Hacking

Python und Gleitkommazahlen

Da ich dieses Halbjahr im Wahlpflichtfach Informatik nach langer Zeit mal wieder in Python programmieren wollte, habe ich meine Beispielprogramme einer kurzen Prüfung unterzogen. Bei einem Programm stutzte ich allerdings dann doch über die Ausgabe:

# Variablen
geld = 10
kostenProTuete = 1.20
anzahlTueten = 0

# Twilight Sparkle geht einkaufen
while geld - kostenProTuete > 0:
    geld = geld - kostenProTuete
    anzahlTueten = anzahlTueten +1

print("Twilight Sparkle hat", anzahlTueten, "Panini Tüten gekauft.")
print("Sie hat noch", geld, "übrig.")

Folgendes wurde vom Programm ausgegeben:

Twilight Sparkle hat 8 Panini Tüten gekauft.
Sie hat noch 0.3999999999999999 übrig.

Äh, what?
Ich dachte eigentlich, dass Münzen kleiner als 1 Cent nicht mehr im Umlauf wären, der Halfpenny ist ja schon länger nicht mehr zu bekommen.

Tja, vermutich ein Bug in Pyto, der Entwicklungsumgebung, die der beste Schulträger von allen auf den iPads der Schüler installiert hat. Also schnell auf dem heimischen iPad mit Pythonista getestet: Gleiches Ergebnis.

Ok, es gibt ja noch a-shell, da ist auch ein Python mit dabei! Gleiches Ergebnis. Wie übrigens auch unter Python auf dem PC. Dort habe ich dann direkt noch etwas herumgespielt:

10-1.1
8.9
8.9-1.1
7.800000000000001
7.8-1.1
6.699999999999999
6.6-1.1
5.5
5.5-1.1
4.4
4.4-1.1
3.3000000000000003
3.3-1.1
2.1999999999999997
2.1-1.1
1.0

Das sieht nicht gesund aus. Das sieht gar nicht gesund aus! Eine kurze Recherche später landete ich auf dieser Seite: What Every Programmer Should Know About Floating-Point Arithmetic or Why don’t my numbers add up?

Kurz eingelesen und schlau gemacht: Rundungsfehler bei der Speicherung der Zahlen sind für die merkwürdigen Ergebnisse verantwortlich. Übrigens in fast allen Programmiersprachen, wie dieser wunderbaren Übersicht zu entnehmen ist.

Als Lösung kann man in Python das Modul „decimal“ verwenden, wie der Spickzettel vorschlägt. Ich glaube aber nicht, dass ich meinen SchülerInnen das vorschlagen werde, schließlich sind es allesamt Programmieranfänger. Außerdem tut es ihnen gut zu wissen, dass Computer zwar schneller rechnen können, aber nicht besser!

MOV nach MP4

Damit ich nicht immer danach suchen muss:

ffmpeg -i video.mov -vcodec h264 -acodec mp2 video.mp4

So geht eine schnelle Konvertierung von MOV nach MP4.

Von Vectornator über Curve zu Affinity Designer 2

Für schnelle vektorbasierte Zeichnungen habe ich auf dem iPad lange Zeit Vectornator von Linearity benutzt. Mal eben schnell eine Skizze für ein Arbeitsblatt erstellen war damit im Handumdrehen erledigt. Die App war leicht zu bedienen und hatte gute Exportoptionen. Günstig war sie auch noch, weil sie weder Geld kostete noch Werbung einblendete. Anscheinend wollte der Hersteller erstmal Nutzer gewinnen und an sich binden. Das scheint Linearity auch auch gelungen zu sein, denn jetzt sollen die Kunden gemolken werden.

Die Oberfläche von Linearity Curve. Aufgeräumt und übersichtlich. Leider ist beim Wechsel von Vectornator zu Curve die Datei in Mitleidenschaft gezogen worden.

Mitte letzten Jahres wurde Vectornator zu Linearity Curve. Gleichzeitig wurde eine eigene Cloud und AI-Unterstützung angekündigt. Fast nebenbei kam dabei auch zur Sprache, dass die App in nicht allzu ferner Zukunft kostenpflichtig werden würde. Ansonsten änderte sich erstmal nichts, außer dass es massive Probleme mit dem Rollout der neuen Cloud gab. Diese Woche kamen dann erste Preisinfos vom Hersteller, die sich echt gewaschen haben:

Es gibt insgesamt drei Preis- bzw. Nutzergruppen:

  1. Starter (kostenlos): 3 Dateien in Curve und 3 Dateien im Animationsprogramm Linearity Move. Das ist echt nicht viel, sogar ich als absoluter Gelegenheitsnutzer habe es in ca. 1,5 Jahren auf mehr als sechs Dateien gebracht.
  2. Pro ($7.99/Monat bei jährlicher Abrechnung, sonst $11.99): Hier gibt es eine unlimitierte Anzahl von Dateien und priorisierten Support. Aber warum wird den Nutzern eine extra Cloud aufgezwungen wo es die Software sowieso nur im Apple-Universum gibt? Die iCloud existiert und funktioniert hervorragend.
  3. Org: Für Organisationen und Unternehmen. Ask for price. Definitiv nicht für meine Zwecke.

Wenn man also Curve ab dem 15. Februar 2024 weiter nutzen möchte, das ist das angekündigte Datum des nächsten Updates, soll man fast $100 pro Jahr auf den Tisch legen. Zumindest wenn man nicht ständig Dateien extern sichern und aus der hauseigenen Cloud löschen möchte, um Platz für neue Skizzen zu schaffen.

Da die Einführung der Linearity Cloud schon eher ruppelig verlief und ich neben iCloud und pCloud nicht noch eine weitere Cloud brauche – ganz zu schweigen von den hohen Kosten für meine geringen Ansprüche – musste eine Alternative her.

Mit Affinity Designer 2 war die auch schnell gefunden. Zwar ist die Benutzeroberfläche bei weitem nicht so aufgeräumt wie bei Curve, aber dafür ist sie fast identisch zu der von Affinity Photo 2, was ich zum Entwickeln und Bearbeiten von Fotos auf dem iPad benutze. Ähnliche Werkzeuge liegen an vergleichbaren Stellen und die Bedienkonzepte unterscheiden sich nur geringfügig. Der Funktionsumfang übersteigt meine bescheidenen Fähigkeiten bei Designer 2 genau so wie bei Curve

Die Oberfläche von Affinity Designer 2. Nicht ganz so aufgeräumt aber trotzdem gut zu verwenden.

Der Export aus Curve und Import in Designer 2 (via SVG) funktionierte problemlos. Nur bei einer Datei musste ich etwas nacharbeiten. Hier war aber auch schon beim Umstieg von Vectornator zu Curve etwas durcheinander gekommen: Netterweise nichts, was nicht innerhalb von einigen Minuten zu korrigieren war.

Und das Erfreulichste: Designer 2 kommt als Einzelkauf ohne Abo-Zwang zu einem Bruchteil des Preises von Curve