2 points par GN⁺ 2026-03-09 | 1 commentaires | Partager sur WhatsApp
  • Bibliothèque Python implémentant l’arithmétique à précision arbitraire sur la base des constructions au compas et à la règle, en effectuant toutes les opérations via des constructions géométriques
  • Représente chaque nombre comme un point du plan, et implémente addition, multiplication et opérations logiques uniquement à l’aide de règles de construction
  • Remplace l’ALU interne de l’émulateur Game Boy (PyBoy) par CasNum, ce qui permet d’exécuter des jeux en s’appuyant uniquement sur des opérations géométriques
  • Inclut des exemples RSA et d’intégration Game Boy, et permet d’observer le processus de construction en temps réel via le viewer de visualisation
  • Publié sous licence MIT, avec PyBoy (LGPL v3) et 2048.gb (licence zlib) modifiés et inclus

Aperçu de CasNum

  • CasNum est une bibliothèque Python qui effectue de l’arithmétique à précision arbitraire à l’aide des constructions au compas et à la règle (compass and straightedge)

    • Chaque nombre x est représenté par le point (x, 0) dans le plan
    • L’addition est implémentée en trouvant le milieu de deux points puis en l’étendant par un facteur deux
    • La multiplication et la division sont construites à l’aide du principe de similitude des triangles
    • Les opérations logiques (AND, OR, XOR) sont également implémentées géométriquement
  • Le moteur de construction de base se trouve dans le répertoire cas/ et prend en charge les cinq constructions fondamentales suivantes

    • Une droite passant par deux points
    • Un cercle centré sur un point et passant par un autre
    • L’intersection de deux droites
    • L’intersection d’une droite et d’un cercle
    • L’intersection de deux cercles
  • À partir de ces opérations de construction, la classe CasNum est définie et effectue géométriquement toutes les opérations arithmétiques et logiques

Principales fonctionnalités et optimisations

  • Les multiplications, divisions et opérations modulo sont implémentées à l’aide de la similitude des triangles et de relations géométriques
  • Certaines opérations (par ex. multiplication par 2) peuvent être effectuées plus efficacement qu’avec un algorithme général
  • Utilise le lru_cache de Python pour mettre en cache les résultats des opérations, ce qui améliore les performances lors des réutilisations
  • En contrepartie, ce cache peut augmenter fortement l’usage mémoire, ce qui demande de l’attention

Exemples d’utilisation

  • Implémentation d’un programme de chiffrement RSA

  • Intégration dans l’ALU de l’émulateur Game Boy (PyBoy) pour remplacer toutes les opérations par CasNum

    • Seul le fichier opcodes_gen.py est modifié au minimum
    • Exécution possible de ROM comme Pokémon Red (avec un démarrage d’environ 15 minutes)
    • À partir du deuxième lancement, fonctionnement à environ 0,5 à 1 FPS grâce au cache
  • Le répertoire examples/ inclut des exemples RSA et Game Boy

  • Le viewer de visualisation (casnum/cas/viewer.py) permet de suivre en temps réel le processus de construction

Philosophie et performances

  • Met en avant un esprit de développement qui consiste, au lieu d’une simple opération a + b, à implémenter directement le processus de recherche du milieu par intersection de droites et de cercles
  • Inclut l’humour philosophique suivant : « Si on ne peut pas incrémenter un compteur de boucle sans résoudre une équation du quatrième degré, alors ce n’est pas une vraie incrémentation »
  • L’expression complexité temporelle : Yes / complexité spatiale : Also yes tourne en dérision le coût de calcul extrêmement élevé

Dépendances et licence

  • Dépendance requise : sympy
  • Dépendances optionnelles : pyglet (visualisation), pytest-lazy-fixtures (tests), pycryptodome (exemple RSA)
  • Distribué sous licence MIT
  • Composants tiers inclus
    • PyBoy (version modifiée) : LGPL v3.0
    • ROM 2048.gb : licence zlib
  • PyBoy a été modifié pour utiliser CasNum, et la version d’origine est disponible sur Baekalfen/PyBoy

FAQ

  • « Peut-on faire tourner Doom ? » → « Non, car ce n’est pas un nombre »
  • « Est-ce rapide ? » → « Bien plus rapide que recopier un exemplaire d’Euclide à la main »
  • « Pourquoi l’avoir créé ? » → « Je voulais de l’arithmétique à précision arbitraire, mais je voulais aussi ressentir quelque chose »

1 commentaires

 
GN⁺ 2026-03-09
Commentaires sur Hacker News
  • La blague au format FAQ est vraiment très parlante
    En particulier le passage « je voulais de l’arithmétique à précision arbitraire, mais je voulais aussi ressentir des émotions » m’a marqué

    • Merci ! Je suis vraiment heureux que tu l’aies ressenti comme ça
  • C’était un projet et une écriture comique vraiment excellents
    La phrase « sauvegardez absolument ce que j’ai écrit avant de l’exécuter » m’a fait mourir de rire
    Je voulais simplement ajouter un compliment de plus, et j’espère que 0x0mer ressentira une chaleureuse lumière intérieure grâce à cette réaction

    • Merci ! Moi aussi, je ressens clairement cette chaleur
  • J’ai appris récemment pour la première fois comment calculer avec un compas et une règle en regardant la vidéo « doubler le cube » de la chaîne de Ben Syversen

  • Merci d’avoir partagé ce projet
    Je me demande comment tu l’as découvert

    • CasNum est une bibliothèque d’arithmétique à précision arbitraire implémentée avec un compas et une règle
      L’expression « 100% more Euclid » est vraiment géniale
  • On pourrait sans doute simplifier l’implémentation avec le compas seul
    Il suffit de se référer au théorème de Mohr–Mascheroni

    • Apparemment, Napoléon s’intéressait aussi beaucoup à ce sujet
      Mascheroni lui a dédié un livre, et il existe une anecdote selon laquelle Laplace aurait dit : « j’attendais tout de lui, sauf des leçons de géométrie »
      Article connexe
  • C’est une approche intéressante pour manipuler de grands nombres sans dépendre uniquement de BigInt
    L’usage d’une base 10^9 permet d’effectuer des opérations efficacement avec des nombres JavaScript ordinaires, tout en réduisant l’utilisation mémoire
    Je serais curieux de voir une comparaison de benchmarks avec BigInt selon les moteurs de navigateur et les versions de Node

  • La formule « pensez-y comme à votre ISA » est d’une clarté remarquable et sémiotiquement raffinée

  • Je me demande quelles seraient les différences par rapport à la bibliothèque reals

    • CasNum ne sera probablement pas si rapide en termes de performances
  • C’est une idée vraiment géniale
    Je me demande s’il serait possible de placer tout l’état du jeu et la ROM sur le plan, puis de calculer l’étape suivante à partir de cet état

    • J’y ai pensé moi aussi
      En théorie, cela semble possible, et on pourrait même l’implémenter sous une forme plus poussée qu’une simulation d’ALU
      Mais dans ce cas, cela réduirait peut-être un peu la pureté de l’ensemble
      Une autre idée serait d’essayer de dessiner directement les graphismes du jeu avec un compas et une règle
  • C’est un projet vraiment adorable

    • Merci !