#63 Spaß mit Zahlen: Under- und Overflows, Rückwärtslaufende Zeit, Negative Modulos und Währungsbeträge

Engineering Kiosk - Ein Podcast von Wolfgang Gassler, Andy Grunwald - Dienstags

Kategorien:

Herausforderungen mit Zahlen in der Programmierung: Hidden bugs, Effekte auf die Realität und der richtige Umgang.Der korrekte Umgang mit Zahlen in der Softwareentwicklung ist so wichtig wie die Reifen bei einem Auto, um es zu fahren.Obwohl viele Entwickler sagen, Mathematik ist ein täglicher Bestandteil des Tages, so kommt man um die Verarbeitung von Zahlen nicht drum herum.Doch wie schon früher in der Schule, kann der Umgang mit Zahlen sehr Herausfordernd sein. In dieser Episode sprechen wir über klassische Fehler, die beim Umgang mit Zahlen in Software gemacht werden, über skurriles Verhalten von Programmiersprachen aber auch über die Effekte dessen auf die reale Welt.Es geht um Datentypen in Programmiersprachen und deren Wertebereiche, Probleme mit großen Zahlen und JSON, Währungsumrechnung und die korrekte Speicherung, Integer-Under- und Overflow, negative Modulo-Berechnungen, rückwärtslaufende Uhrzeiten und wie verschiedene Programmiersprachen sich bei der selben Berechnung anders verhalten.Bonus: Ob Wolfgang Graf Zahl von der Sesamstraße kennt und warum JavaScript nicht gut in dieser Episode davonkommt.Das schnelle Feedback zur Episode:👍 (top) 👎 (geht so)Feedback (gerne auch als Voice Message)EngKiosk Community: https://engineeringkiosk.dev/join-discord Email: [email protected]: https://podcasts.social/@engkioskTwitter: https://twitter.com/EngKioskWhatsApp +49 15678 136776Gerne behandeln wir auch euer Audio Feedback in einer der nächsten Episoden, einfach Audiodatei per Email oder WhatsApp Voice Message an +49 15678 136776LinksKatalog der ACM für Computer-Informatik/Forschungsbereiche: https://en.wikipedia.org/wiki/ACM_Computing_Classification_System PHP Spaceship operator: https://www.php.net/manual/en/migration70.new-features.phpGraf Zahl (Sesamstraße): https://de.wikipedia.org/wiki/Sesamstra%C3%9Fe#Graf_ZahlGo Programmiersprache: https://go.dev/Numerische Datentypen in Go: https://go.dev/ref/spec#Numeric_typesJavaScript Number Encoding: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number#number_encodingTC39 Comittee zur Erweiterung von JSON um BigInt: https://github.com/tc39/proposal-json-parse-with-sourceLLVM CLang UndefinedBehaviorSanitizer: https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.htmlModulo mit negativen Zahlen: https://torstencurdt.com/tech/posts/modulo-of-negative-numbers/“Salami Taktik” Kleine Geldbeträge stehlen: https://en.wikipedia.org/wiki/Salami_slicing_tactics Examples of problems with integers: https://jvns.ca/blog/2023/01/18/examples-of-problems-with-integers/Examples of floating point problems: https://jvns.ca/blog/2023/01/13/examples-of-floating-point-problems/Sprungmarken(00:00:00) Intro(00:01:03) Wie viel hat Informatik und Mathematik mit Softwareentwicklung zu tun und Bitoperationen(00:06:24) Das heutige Thema: Probleme mit Zahlen (integer, float, double, decimals)(00:08:09) Implizite Typ-Konvertierung bei Skriptsprachen und verschiedene Basen von Zahlen(00:10:37) Division in MySQL mit Konvertierung nach JSON wird zum string(00:12:39) Einstieg in Datentypen: int, int32, int64, signed, unsigned, Wertebereiche, Go und JavaScript(00:20:58) Problem mit großen Zahlen: Twitter Tweet IDs, JavaScript BigInt und JSON(00:26:51) Probleme mit Währungen: Rundungsfehler und die korrekte Speicherung(00:35:31) Probleme mit Wertebereichen: Under- und Overflows, Signed und Unsigned Datentypen(00:40:43) Under- und Overflow in der Realität: Das Jahr 2038 und 2036 Problem(00:44:43) Probleme mit Zeit: Rückwärts Laufende Uhren, Leap-Seconds und Monotonic-Clock(00:52:46) Probleme mit Modulo: Negative Zahlen führen zu verschiedenen Ergebnissen(00:58:42) Weitere Probleme mit Zahlen: Portabilität, Zahlen-Basen, UUID und Bit-OperationenHostsWolfgang Gassler (https://mastodon.social/@woolf)Andy Grunwald (https://twitter.com/andygrunwald)Feedback (gerne auch als Voice Message)EngKiosk Community: https://engineeringkiosk.dev/join-discord Email: [email protected]: https://podcasts.social/@engkioskTwitter: https://twitter.com/EngKioskWhatsApp +49 15678 136776