CasNum - Bibliothèque d’arithmétique à précision arbitraire avec compas et règle
(github.com/0x0mer)- 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
xest 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
- Chaque nombre
-
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_cachede 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.pyest 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
- Seul le fichier
-
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.