2 puntos por GN⁺ 2026-03-09 | 1 comentarios | Compartir por WhatsApp
  • Biblioteca de Python que implementa aritmética de precisión arbitraria basada en las construcciones con compás y regla, realizando todas las operaciones mediante construcciones geométricas
  • Representa cada número como un punto en el plano, e implementa suma, multiplicación y operaciones lógicas completamente mediante reglas de construcción
  • Puede reemplazar la ALU interna del emulador de Game Boy (PyBoy) con CasNum, permitiendo ejecutar juegos usando únicamente operaciones geométricas
  • Incluye ejemplos de RSA y de integración con Game Boy, y permite ver el proceso de construcción en tiempo real mediante el viewer de visualización
  • Publicada bajo licencia MIT, e incluye versiones modificadas de PyBoy (LGPL v3) y 2048.gb (licencia zlib)

Descripción general de CasNum

  • CasNum es una biblioteca de Python que realiza aritmética de precisión arbitraria usando construcciones con compás y regla (compass and straightedge)

    • Cada número x se representa como el punto (x, 0) en el plano
    • La suma se implementa encontrando el punto medio entre dos puntos y expandiéndolo al doble
    • La multiplicación y la división se construyen usando el principio de semejanza de triángulos
    • Las operaciones lógicas (AND, OR, XOR) también están implementadas geométricamente
  • El motor base de construcciones está en el directorio cas/ y admite las siguientes cinco construcciones básicas

    • Recta que pasa por dos puntos
    • Circunferencia con centro en un punto y que pasa por otro punto
    • Intersección de dos rectas
    • Intersección entre una recta y una circunferencia
    • Intersección entre dos circunferencias
  • A partir de estas operaciones de construcción se define la clase CasNum, que realiza tanto operaciones aritméticas como lógicas de forma geométrica

Funciones principales y optimización

  • Multiplicación, división y operación módulo se implementan usando semejanza de triángulos y relaciones geométricas
  • Algunas operaciones específicas (por ejemplo, multiplicar por 2) pueden realizarse de forma más eficiente que con el algoritmo general
  • Usa lru_cache de Python para almacenar en caché los resultados de las operaciones, mejorando la velocidad al reutilizarlos
  • Debido a la caché, el uso de memoria puede aumentar considerablemente, por lo que hay que tener cuidado

Ejemplos de uso

  • Implementación de un programa de cifrado RSA

  • Integración en la ALU del emulador de Game Boy (PyBoy), reemplazando todas las operaciones por CasNum

    • Solo se modifica mínimamente el archivo opcodes_gen.py
    • Puede ejecutar ROMs como Pokémon Red (aunque el arranque tarda unos 15 minutos)
    • Desde la segunda ejecución, gracias a la caché, funciona a aproximadamente 0.5~1 FPS
  • El directorio examples/ incluye ejemplos de RSA y Game Boy

  • El viewer de visualización (casnum/cas/viewer.py) permite observar el proceso de construcción en tiempo real

Filosofía y rendimiento

  • En lugar de una simple operación a + b, enfatiza el espíritu de desarrollo de implementar directamente el proceso de encontrar un punto medio mediante la intersección de rectas y circunferencias
  • Incluye el humor filosófico: “si no puedes incrementar un contador de bucle sin resolver una ecuación de cuarto grado, entonces no es un incremento de verdad”
  • Usa la expresión complejidad temporal: Yes / complejidad espacial: Also yes para satirizar lo costoso que es el cálculo

Dependencias y licencia

  • Dependencia obligatoria: sympy
  • Dependencias opcionales: pyglet (para visualización), pytest-lazy-fixtures (para pruebas), pycryptodome (para el ejemplo de RSA)
  • Distribuida bajo licencia MIT
  • Componentes de terceros incluidos
    • PyBoy (versión modificada): LGPL v3.0
    • 2048.gb ROM: licencia zlib
  • PyBoy fue modificado para usar CasNum, y el original puede consultarse en Baekalfen/PyBoy

FAQ

  • “¿Puede ejecutar Doom?” → “No, porque es un número”
  • “¿Es rápido?” → “Muchísimo más rápido que copiar a mano un ejemplar de Euclides”
  • “¿Por qué se hizo?” → “Quería aritmética de precisión arbitraria, pero al mismo tiempo quería sentir algo

1 comentarios

 
GN⁺ 2026-03-09
Comentarios de Hacker News
  • El chiste en formato FAQ se siente demasiado identificable
    En especial, me impactó la parte de “quería aritmética de precisión arbitraria, pero también quería sentir emociones”

    • ¡Gracias! Me alegra muchísimo que te haya hecho sentir eso
  • Fue un proyecto y una escritura cómica realmente excelentes
    La frase “asegúrate de guardar lo que escribí antes de ejecutarlo” me dio muchísima risa
    Solo quería sumar más elogios, y ojalá 0x0mer haya sentido una cálida luz interior con esta reacción

    • ¡Gracias! Yo también estoy sintiendo claramente esa calidez
  • Hace poco vi el video de ‘Duplicar el cubo’ del canal de Ben Syversen, y fue la primera vez que aprendí sobre cómo calcular con compás y regla

  • Gracias por publicar este proyecto
    Me da curiosidad cómo lo descubriste

    • CasNum es una librería de aritmética de precisión arbitraria implementada con compás y regla
      La expresión “100% más Euclides” es buenísima
  • Parece que también se podría simplificar la implementación usando solo compás
    Basta con revisar el teorema de Mohr–Mascheroni

    • Dicen que Napoleón también estaba muy interesado en este tema
      Mascheroni le dedicó un libro, y está la anécdota de que Laplace dijo: “Esperaba todo de él, menos lecciones de geometría”
      Artículo relacionado
  • Es un enfoque interesante para manejar números grandes sin depender solo de BigInt
    Usa una base 10^9 para realizar operaciones eficientes con números normales de JavaScript, y también puede reducir el uso de memoria
    Me da curiosidad ver una comparación de benchmarks con BigInt según el motor del navegador y la versión de Node

  • La frase “piensa en esto como tu ISA” es muy clara y semióticamente refinada

  • Me pregunto qué diferencias habría en comparación con la librería reals

    • Parece que CasNum probablemente no será tan rápida en términos de rendimiento
  • Es una idea realmente genial
    Me pregunto si sería posible poner todo el estado del juego y la ROM sobre el plano, y calcular el siguiente paso a partir de ese estado

    • Yo también lo pensé
      En teoría parece posible, e incluso podría implementarse de una forma más amplia que una simulación de ALU
      Aunque si se hace así, da la impresión de que se perdería un poco la pureza
      Otra idea sería intentar dibujar directamente los gráficos del juego con compás y regla
  • Es un proyecto realmente encantador

    • ¡Gracias!