2 Punkte von GN⁺ 2026-03-09 | 1 Kommentare | Auf WhatsApp teilen
  • Eine Python-Bibliothek, die Arithmetik mit beliebiger Genauigkeit auf Basis von Konstruktionen mit Zirkel und Lineal implementiert und alle Operationen als geometrische Konstruktionen ausführt
  • Stellt jede Zahl als Punkt in der Ebene dar und implementiert Addition, Multiplikation und logische Operationen vollständig über Konstruktionsregeln
  • Ersetzt die ALU des Game-Boy-Emulators (PyBoy) durch CasNum, sodass Spiele ausschließlich mit geometrischen Operationen ausgeführt werden können
  • Enthält RSA-Beispiele und ein Game-Boy-Integrationsbeispiel; über den Visualisierungs-Viewer (viewer) lässt sich der Konstruktionsprozess in Echtzeit beobachten
  • Wird unter der MIT-Lizenz veröffentlicht und enthält angepasste Versionen von PyBoy (LGPL v3) und 2048.gb (zlib-Lizenz)

Überblick über CasNum

  • CasNum ist eine Python-Bibliothek für Arithmetik mit beliebiger Genauigkeit mittels Konstruktionen mit Zirkel und Lineal (compass and straightedge)

    • Jede Zahl x wird als Punkt (x, 0) in der Ebene dargestellt
    • Addition wird umgesetzt, indem der Mittelpunkt zweier Punkte gefunden und anschließend auf das Doppelte erweitert wird
    • Multiplikation und Division werden mithilfe des Prinzips ähnlicher Dreiecke konstruiert
    • Auch logische Operationen (AND, OR, XOR) sind geometrisch implementiert
  • Die grundlegende Konstruktions-Engine befindet sich im Verzeichnis cas/ und unterstützt die folgenden fünf Basis-Konstruktionen

    • eine Gerade durch zwei Punkte
    • ein Kreis mit einem Punkt als Mittelpunkt durch einen anderen Punkt
    • der Schnittpunkt zweier Geraden
    • der Schnittpunkt einer Geraden und eines Kreises
    • der Schnittpunkt zweier Kreise
  • Auf Basis dieser Konstruktionsoperationen ist die CasNum-Klasse definiert, die arithmetische und logische Operationen vollständig geometrisch ausführt

Hauptfunktionen und Optimierungen

  • Multiplikation, Division und Modulo-Operationen werden über ähnliche Dreiecke und geometrische Beziehungen implementiert
  • Bestimmte Operationen (z. B. Multiplikation mit 2) lassen sich effizienter ausführen als mit dem allgemeinen Algorithmus
  • Verwendet Pythons lru_cache, um Operationsergebnisse zu cachen und bei Wiederverwendung zu beschleunigen
  • Durch das Caching kann der Speicherverbrauch stark ansteigen, was zu beachten ist

Anwendungsbeispiele

  • Implementierung eines RSA-Verschlüsselungsprogramms

  • Integration in die ALU des Game-Boy-Emulators (PyBoy), wobei alle Operationen durch CasNum ersetzt werden

    • Nur die Datei opcodes_gen.py muss minimal angepasst werden
    • ROMs wie Pokémon Red können ausgeführt werden (der Bootvorgang dauert allerdings etwa 15 Minuten)
    • Ab dem zweiten Start läuft es dank Cache mit etwa 0,5 bis 1 FPS
  • Das Verzeichnis examples/ enthält RSA- und Game-Boy-Beispiele

  • Über den Visualisierungs-Viewer (casnum/cas/viewer.py) lässt sich der Konstruktionsprozess in Echtzeit verfolgen

Philosophie und Performance

  • Betont einen Entwicklergeist, der statt einer einfachen a + b-Operation den Prozess zum Finden eines Mittelpunkts über den Schnitt von Geraden und Kreisen direkt implementiert
  • Enthält den philosophischen Witz: „Wenn man den Schleifenzähler nicht erhöhen kann, ohne eine Gleichung vierten Grades zu lösen, ist es kein echter Inkrement-Schritt“
  • Beschreibt die Kosten satirisch mit Zeitkomplexität: Yes / Speicherkomplexität: Also yes

Abhängigkeiten und Lizenz

  • Pflichtabhängigkeit: sympy
  • Optionale Abhängigkeiten: pyglet (für die Visualisierung), pytest-lazy-fixtures (für Tests), pycryptodome (für das RSA-Beispiel)
  • Vertrieb unter der MIT-Lizenz
  • Enthaltene Drittanbieter-Komponenten
    • PyBoy (modifizierte Version): LGPL v3.0
    • 2048.gb-ROM: zlib-Lizenz
  • PyBoy wurde für die Verwendung mit CasNum angepasst; das Original ist unter Baekalfen/PyBoy verfügbar

FAQ

  • „Kann es Doom ausführen?“ → „Nein, denn es ist eine Zahl“
  • „Ist es schnell?“ → „Viel schneller, als eine Kopie von Euklid von Hand abzuschreiben“
  • „Warum wurde es gebaut?“ → „Ich wollte Arithmetik mit beliebiger Genauigkeit, aber zugleich auch etwas dabei fühlen

1 Kommentare

 
GN⁺ 2026-03-09
Hacker-News-Kommentare
  • Der FAQ-artige Witz war extrem nachvollziehbar
    Besonders der Teil „Arithmetik mit beliebiger Präzision wollte ich, aber ich wollte auch etwas fühlen“ ist hängen geblieben

    • Danke! Freut mich sehr, dass es so angekommen ist
  • Wirklich großartige humorvolle Schreibe und ein tolles Projekt
    Der Satz „Was ich geschrieben habe, sollte man unbedingt speichern, bevor man es ausführt“ war zum Totlachen
    Ich wollte einfach noch ein bisschen Lob dalassen und hoffe, dass 0x0mer aus dieser Reaktion ein warmes inneres Leuchten mitnimmt

    • Danke! Ich spüre diese warme Stimmung auch ganz deutlich
  • Ich habe erst vor Kurzem durch das Video „Doubling the Cube“ vom Ben-Syversen-Kanal gelernt, wie man mit Zirkel und Lineal rechnet

  • Danke fürs Posten dieses Projekts
    Mich würde interessieren, wie du darauf gestoßen bist

    • CasNum ist eine Arithmetikbibliothek mit beliebiger Präzision, umgesetzt mit Zirkel und Lineal
      Die Formulierung „100% mehr Euklid“ ist einfach großartig
  • Man könnte die Implementierung vielleicht sogar nur auf den Zirkel reduzieren
    Siehe dazu das Mohr-Mascheroni-Theorem

    • Angeblich hatte auch Napoleon großes Interesse an solchen Themen
      Mascheroni widmete ihm ein Buch, und von Laplace stammt die Anekdote: „Von ihm hätte ich alles erwartet, nur keinen Geometrieunterricht.“
      Verwandter Artikel
  • Ein interessanter Ansatz für den Umgang mit großen Zahlen, ohne sich nur auf BigInt zu verlassen
    Mit einer 10^9-Basis könnte man effiziente Operationen mit normalen JavaScript-Zahlen durchführen und zugleich den Speicherverbrauch senken
    Mich würde ein Benchmark-Vergleich mit BigInt je nach Browser-Engine und Node-Version interessieren

  • Die Formulierung „Betrachte das als deine ISA“ ist extrem klar und semiotisch ausgefeilt

  • Ich frage mich, worin genau die Unterschiede zur reals-Bibliothek liegen

    • Bei der Performance wird CasNum vermutlich nicht besonders schnell sein
  • Wirklich eine tolle Idee
    Ich frage mich, ob man den kompletten Spielzustand und das ROM auf einer Ebene ablegen und daraus den nächsten Schritt berechnen könnte

    • Daran habe ich auch schon gedacht
      Theoretisch müsste das möglich sein, und man könnte es sogar in einer weiter ausgebauten Form als eine ALU-Simulation umsetzen
      Allerdings würde dabei wohl ein wenig von der Reinheit verloren gehen
      Eine andere Idee wäre, Spielgrafik direkt mit Zirkel und Lineal zu zeichnen
  • Ein wirklich liebenswertes Projekt

    • Danke!