2 poin oleh GN⁺ 2026-03-09 | 1 komentar | Bagikan ke WhatsApp
  • Pustaka Python yang mengimplementasikan aritmetika presisi arbitrer berdasarkan konstruksi kompas dan penggaris, dengan semua operasi dilakukan melalui konstruksi geometri
  • Setiap angka direpresentasikan sebagai titik pada bidang, dan penjumlahan, perkalian, serta operasi logika semuanya diimplementasikan dengan aturan konstruksi
  • ALU di dalam emulator Game Boy (PyBoy) dapat diganti dengan CasNum, sehingga game bisa dijalankan hanya dengan operasi geometris
  • Termasuk contoh RSA dan integrasi Game Boy, serta proses konstruksi dapat dilihat secara real time melalui viewer visualisasi
  • Dirilis dengan lisensi MIT, serta memodifikasi dan menyertakan PyBoy (LGPL v3) dan 2048.gb (lisensi zlib)

Gambaran umum CasNum

  • CasNum adalah pustaka Python untuk melakukan aritmetika presisi arbitrer dengan konstruksi kompas dan penggaris (compass and straightedge)

    • Setiap angka x direpresentasikan sebagai titik (x, 0) pada bidang
    • Penjumlahan diimplementasikan dengan mencari titik tengah dari dua titik lalu memperluasnya menjadi dua kali lipat
    • Perkalian dan pembagian dibangun menggunakan prinsip kesebangunan segitiga
    • Operasi logika (AND, OR, XOR) juga diimplementasikan secara geometris
  • Mesin konstruksi dasar berada di direktori cas/ dan mendukung lima konstruksi dasar berikut

    • Garis lurus yang melalui dua titik
    • Lingkaran berpusat di satu titik dan melalui titik lain
    • Titik potong dua garis
    • Titik potong garis dan lingkaran
    • Titik potong dua lingkaran
  • Berdasarkan operasi konstruksi tersebut, kelas CasNum didefinisikan untuk melakukan operasi aritmetika dan logika sepenuhnya secara geometris

Fitur utama dan optimisasi

  • Perkalian, pembagian, dan operasi modulo diimplementasikan menggunakan kesebangunan segitiga dan relasi geometris
  • Operasi tertentu (misalnya perkalian 2 kali) dapat dijalankan lebih efisien daripada algoritme umum
  • Menggunakan lru_cache milik Python untuk menyimpan hasil operasi dalam cache, sehingga lebih cepat saat digunakan ulang
  • Karena cache, penggunaan memori dapat meningkat sangat besar, sehingga perlu diperhatikan

Contoh penggunaan

  • Implementasi program enkripsi RSA

  • Diintegrasikan ke ALU milik emulator Game Boy (PyBoy), menggantikan semua operasi dengan CasNum

    • Hanya file opcodes_gen.py yang dimodifikasi seminimal mungkin
    • ROM seperti Pokémon Red dapat dijalankan (namun waktu boot sekitar 15 menit)
    • Mulai eksekusi kedua dan seterusnya, berkat cache dapat berjalan di sekitar 0.5~1 FPS
  • Direktori examples/ berisi contoh RSA dan Game Boy

  • Proses konstruksi dapat diamati secara real time melalui viewer visualisasi (casnum/cas/viewer.py)

Filosofi dan performa

  • Menekankan semangat developer yang memilih untuk mengimplementasikan langsung proses mencari titik tengah lewat perpotongan garis dan lingkaran, alih-alih sekadar operasi a + b yang sederhana
  • Memuat humor filosofis: “Jika penghitung loop tidak bisa dinaikkan tanpa menyelesaikan persamaan kuartik, maka itu belum increment yang sesungguhnya”
  • Menggunakan ungkapan kompleksitas waktu: Yes / kompleksitas ruang: Also yes untuk menyindir betapa besarnya biaya komputasinya

Dependensi dan lisensi

  • Dependensi wajib: sympy
  • Dependensi opsional: pyglet (untuk visualisasi), pytest-lazy-fixtures (untuk pengujian), pycryptodome (untuk contoh RSA)
  • Didistribusikan dengan lisensi MIT
  • Komponen pihak ketiga yang disertakan
    • PyBoy (versi modifikasi): LGPL v3.0
    • ROM 2048.gb: lisensi zlib
  • PyBoy dimodifikasi agar menggunakan CasNum, dan versi aslinya dapat dilihat di Baekalfen/PyBoy

FAQ

  • “Bisakah menjalankan Doom?” → “Tidak, karena itu angka”
  • “Cepat tidak?” → “Jauh lebih cepat daripada menyalin salinan Euclid dengan tangan”
  • “Kenapa dibuat?” → “Karena ingin aritmetika presisi arbitrer, tapi sekaligus ingin merasakan sesuatu

1 komentar

 
GN⁺ 2026-03-09
Komentar Hacker News
  • Lelucon dalam format FAQ terasa sangat relate
    Terutama bagian “aritmetika presisi arbitrer yang kuinginkan, tetapi aku juga ingin merasakan emosi” sangat berkesan

    • Terima kasih! Senang sekali mendengarnya
  • Ini benar-benar penulisan yang lucu sekaligus proyek yang hebat
    Kalimat “apa pun yang kutulis, pastikan disimpan sebelum dijalankan” benar-benar bikin tertawa
    Aku hanya ingin menambahkan pujian, dan berharap 0x0mer merasakan cahaya batin yang hangat dari respons ini

    • Terima kasih! Aku juga benar-benar merasakan kehangatan itu
  • Baru-baru ini aku menonton video ‘Doubling the Cube’ dari kanal Ben Syversen, dan untuk pertama kalinya belajar cara menghitung dengan kompas dan penggaris

  • Terima kasih sudah membagikan proyek ini
    Aku penasaran bagaimana kamu menemukannya

    • CasNum adalah library aritmetika presisi arbitrer yang diimplementasikan dengan kompas dan penggaris
      Ungkapan “100% lebih banyak Euclid” terdengar sangat keren
  • Sepertinya implementasinya juga bisa disederhanakan hanya dengan kompas
    Lihat teorema Mohr–Mascheroni

    • Katanya Napoleon juga sangat tertarik pada topik seperti ini
      Mascheroni mendedikasikan sebuah buku kepadanya, dan ada anekdot bahwa Laplace berkata, “Saya mengharapkan segalanya darinya, kecuali pelajaran geometri”
      Tulisan terkait
  • Ini pendekatan yang menarik untuk menangani bilangan besar tanpa hanya bergantung pada BigInt
    Dengan basis 10^9, operasi yang efisien bisa dilakukan memakai angka JavaScript biasa, sekaligus mengurangi penggunaan memori
    Aku penasaran dengan perbandingan benchmark melawan BigInt di berbagai browser engine dan versi Node

  • Ungkapan “anggap ini sebagai ISA Anda” sangat jelas dan sangat rapi secara semiotik

  • Aku penasaran apa perbedaannya dibanding library reals

    • Dalam hal performa, CasNum sepertinya tidak akan terlalu cepat
  • Ide yang sangat keren
    Aku penasaran apakah mungkin menaruh seluruh status game dan ROM di atas bidang, lalu menghitung langkah berikutnya dari keadaan itu

    • Aku juga sempat memikirkan itu
      Secara teoretis sepertinya mungkin, dan bahkan bisa diimplementasikan dalam bentuk yang lebih luas daripada simulasi ALU
      Hanya saja, kalau begitu, kemurniannya mungkin akan sedikit berkurang
      Ide lain adalah mencoba menggambar grafik game secara langsung dengan kompas dan penggaris
  • Proyek yang benar-benar menggemaskan

    • Terima kasih!