2 points par GN⁺ 2026-03-09 | Aucun commentaire pour le moment. | 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 »

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.