2 pontos por GN⁺ 2026-03-09 | 1 comentários | Compartilhar no WhatsApp
  • Uma biblioteca Python que implementa aritmética de precisão arbitrária com base em construções com compasso e régua, realizando todas as operações por meio de construções geométricas
  • Cada número é representado como um ponto no plano, e adição, multiplicação e operações lógicas são todas implementadas por regras de construção
  • É possível substituir a ALU interna do emulador de Game Boy (PyBoy) pelo CasNum, permitindo executar jogos usando apenas operações geométricas
  • Inclui exemplos com RSA e integração com Game Boy, e é possível ver o processo de construção em tempo real por meio do visualizador (viewer)
  • Disponibilizado sob a licença MIT, e modifica/inclui o PyBoy (LGPL v3) e o 2048.gb (licença zlib)

Visão geral do CasNum

  • CasNum é uma biblioteca Python que realiza aritmética de precisão arbitrária usando construções com compasso e régua (compass and straightedge)

    • Cada número x é representado como o ponto (x, 0) no plano
    • A adição é implementada encontrando o ponto médio entre dois pontos e expandindo-o ao dobro
    • Multiplicação e divisão são construídas usando o princípio da semelhança de triângulos
    • Operações lógicas (AND, OR, XOR) também são implementadas geometricamente
  • O mecanismo básico de construção fica no diretório cas/ e oferece suporte às cinco construções básicas a seguir

    • reta que passa por dois pontos
    • círculo com centro em um ponto e passando por outro
    • interseção de duas retas
    • interseção entre reta e círculo
    • interseção entre dois círculos
  • Com base nessas operações de construção, a classe CasNum é definida e executa geometricamente tanto operações aritméticas quanto lógicas

Principais recursos e otimizações

  • Multiplicação, divisão e operação de módulo são implementadas usando semelhança de triângulos e relações geométricas
  • Algumas operações específicas (por exemplo, multiplicação por 2) podem ser executadas com mais eficiência do que no algoritmo geral
  • Usa o lru_cache do Python para armazenar em cache os resultados das operações, melhorando a velocidade em reutilizações
  • Devido ao cache, o uso de memória pode aumentar bastante, exigindo atenção

Exemplos de uso

  • Implementação de um programa de criptografia RSA

  • Integração com a ALU do emulador de Game Boy (PyBoy), substituindo todas as operações pelo CasNum

    • Apenas o arquivo opcodes_gen.py foi modificado minimamente
    • É possível executar ROMs como Pokémon Red (embora a inicialização leve cerca de 15 minutos)
    • A partir da segunda execução, graças ao cache, roda a cerca de 0,5~1 FPS
  • O diretório examples/ inclui exemplos de RSA e Game Boy

  • É possível acompanhar o processo de construção em tempo real por meio do visualizador (casnum/cas/viewer.py)

Filosofia e desempenho

  • Em vez de uma operação simples como a + b, o projeto enfatiza o espírito de implementar diretamente o processo de encontrar o ponto médio pela interseção entre retas e círculos
  • Inclui o humor filosófico: “Se você não consegue incrementar um contador de loop sem resolver uma equação de quarto grau, então isso não é um incremento de verdade”
  • A expressão complexidade de tempo: Yes / complexidade de espaço: Also yes é usada de forma satírica para indicar o altíssimo custo computacional

Dependências e licença

  • Dependência obrigatória: sympy
  • Dependências opcionais: pyglet (visualização), pytest-lazy-fixtures (testes), pycryptodome (exemplo de RSA)
  • Distribuído sob a licença MIT
  • Componentes de terceiros incluídos
    • PyBoy (versão modificada): LGPL v3.0
    • 2048.gb ROM: licença zlib
  • O PyBoy foi modificado para usar o CasNum, e o original pode ser encontrado em Baekalfen/PyBoy

FAQ

  • “Dá para rodar Doom?” → “Não, porque é um número”
  • “É rápido?” → “Muito mais rápido do que copiar à mão um exemplar de Euclides”
  • “Por que isso foi feito?” → “Eu queria aritmética de precisão arbitrária, mas ao mesmo tempo queria sentir alguma coisa

1 comentários

 
GN⁺ 2026-03-09
Comentários do Hacker News
  • A piada em formato de FAQ foi extremamente relacionável
    especialmente a parte “eu queria aritmética de precisão arbitrária, mas também queria sentir emoções”

    • Obrigado! Fico muito feliz que tenha sido essa a sensação
  • Foi um projeto e uma escrita cômica realmente excelentes
    A frase “salve o que escrevi antes de executar” foi hilária
    Só queria somar mais elogios e espero que o 0x0mer tenha sentido uma luz interior acolhedora com essa reação

    • Obrigado! Eu certamente estou sentindo essa energia calorosa
  • Recentemente vi o vídeo ‘dobrando o cubo’ no canal do Ben Syversen e foi a primeira vez que aprendi como calcular com compasso e régua

  • Obrigado por postar este projeto
    Fiquei curioso sobre como você encontrou isso

    • CasNum é uma biblioteca de aritmética de precisão arbitrária implementada com compasso e régua
      A expressão “100% mais Euclides” é muito boa
  • Parece que também daria para simplificar a implementação usando apenas compasso
    Basta consultar o teorema de Mohr–Mascheroni

    • Dizem que Napoleão também tinha muito interesse nesse tema
      Mascheroni dedicou o livro a ele, e há a anedota de que Laplace disse: “eu esperava tudo dele, menos aulas de geometria”
      Texto relacionado
  • É uma abordagem interessante para lidar com números grandes sem depender só de BigInt
    Usar uma base 10^9 permite fazer operações eficientes com números JavaScript comuns e também reduzir o uso de memória
    Fiquei curioso para ver uma comparação de benchmarks com BigInt em diferentes engines de navegador e versões do Node

  • A expressão “pense nisso como sua ISA” é muito clara e semioticamente refinada

  • Fiquei curioso sobre quais seriam as diferenças em comparação com a biblioteca reals

    • Parece que o CasNum não deve ser tão rápido em termos de desempenho
  • É uma ideia muito legal
    Fiquei me perguntando se seria possível colocar todo o estado de um jogo e a ROM em um plano e, a partir desse estado, calcular o próximo passo

    • Eu também pensei nisso
      Em teoria, parece possível, e talvez até dê para implementar isso de uma forma mais expandida do que uma simulação de ALU
      Só que, se fizer isso, parece que perderia um pouco da pureza
      Outra ideia seria tentar desenhar os gráficos do jogo diretamente com compasso e régua
  • Que projeto adorável

    • Obrigado!