2 puan yazan GN⁺ 2026-03-09 | 1 yorum | WhatsApp'ta paylaş
  • Pergel ve cetvel konstrüksiyonlarını temel alarak isteğe bağlı hassasiyetli aritmetiği gerçekleştiren bir Python kütüphanesi; tüm işlemler geometrik yapılarla yürütülüyor
  • Her sayı düzlem üzerindeki bir nokta olarak ifade ediliyor ve toplama, çarpma ve mantıksal işlemler tamamen konstrüksiyon kurallarıyla uygulanıyor
  • Game Boy emülatörü (PyBoy) içindeki ALU, CasNum ile değiştirilerek oyunların yalnızca geometrik işlemlerle çalıştırılması sağlanabiliyor
  • RSA örneği ve Game Boy entegrasyon örneği içeriyor; ayrıca görselleştirme görüntüleyicisi (viewer) üzerinden konstrüksiyon süreci gerçek zamanlı izlenebiliyor
  • MIT lisansı ile yayımlanıyor; PyBoy (LGPL v3) ve 2048.gb'yi (zlib lisansı) değiştirilmiş hâlleriyle içeriyor

CasNum'a Genel Bakış

  • CasNum, pergel ve cetvel konstrüksiyonlarını (compass and straightedge) kullanarak isteğe bağlı hassasiyetli aritmetik yapan bir Python kütüphanesi

    • Her x sayısı düzlem üzerindeki (x, 0) noktası olarak gösteriliyor
    • Toplama, iki noktanın orta noktasını bulup bunu iki katına genişletme yöntemiyle gerçekleştiriliyor
    • Çarpma ve bölme, üçgen benzerliği ilkesi kullanılarak kuruluyor
    • Mantıksal işlemler (AND, OR, XOR) de geometrik olarak uygulanmış durumda
  • Temel konstrüksiyon motoru cas/ dizininde yer alıyor ve şu beş temel konstrüksiyonu destekliyor

    • İki noktadan geçen doğru
    • Merkezi bir nokta olan ve başka bir noktadan geçen çember
    • İki doğrunun kesişim noktası
    • Doğru ile çemberin kesişim noktası
    • İki çemberin kesişim noktası
  • Bu konstrüksiyon işlemleri temel alınarak CasNum sınıfı tanımlanıyor ve aritmetik ile mantıksal işlemlerin tamamı geometrik olarak yürütülüyor

Başlıca Özellikler ve Optimizasyonlar

  • Çarpma, bölme ve mod alma işlemleri gibi işlemler, üçgen benzerliği ve geometrik ilişkiler kullanılarak uygulanıyor
  • Belirli işlemler (ör. 2 ile çarpma) genel algoritmalara göre daha verimli gerçekleştirilebiliyor
  • Python'un lru_cache özelliği kullanılarak işlem sonuçları önbelleğe alınıyor; tekrar kullanımda hız artışı sağlanıyor
  • Önbellek nedeniyle bellek kullanımı ciddi ölçüde artabilir, dikkat edilmesi gerekiyor

Kullanım Örnekleri

  • RSA şifreleme programı gerçekleştirme

  • Game Boy emülatörü (PyBoy) ALU'suna entegre edilerek tüm işlemlerin CasNum ile değiştirilmesi

    • Yalnızca opcodes_gen.py dosyasında asgari düzeyde değişiklik gerekiyor
    • Pokémon Red gibi ROM'lar çalıştırılabiliyor (ancak açılış yaklaşık 15 dakika sürüyor)
    • İkinci çalıştırmadan itibaren önbellek sayesinde yaklaşık 0.5~1 FPS hızında çalışıyor
  • examples/ dizininde RSA ve Game Boy örnekleri bulunuyor

  • Görselleştirme görüntüleyicisi (casnum/cas/viewer.py) ile konstrüksiyon süreci gerçek zamanlı olarak incelenebiliyor

Felsefe ve Performans

  • Basit bir a + b işlemi yerine, doğru ve çember kesişimleriyle orta nokta bulma sürecini doğrudan gerçekleştiren geliştirici ruhunu öne çıkarıyor
  • “Dördüncü dereceden bir denklemi çözmeden döngü sayacını artıramıyorsan, bu gerçek bir artırma değildir” şeklinde felsefi bir mizah içeriyor
  • Zaman karmaşıklığı: Evet / alan karmaşıklığı: O da evet ifadesiyle, hesaplama maliyetinin çok yüksek olduğunu hicivli biçimde anlatıyor

Bağımlılıklar ve Lisans

  • Zorunlu bağımlılık: sympy
  • İsteğe bağlı bağımlılıklar: pyglet (görselleştirme için), pytest-lazy-fixtures (test için), pycryptodome (RSA örneği için)
  • MIT lisansı ile dağıtılıyor
  • Dahil edilen üçüncü taraf bileşenler
    • PyBoy (değiştirilmiş sürüm): LGPL v3.0
    • 2048.gb ROM: zlib lisansı
  • PyBoy, CasNum kullanacak şekilde değiştirilmiş; özgün sürümüne Baekalfen/PyBoy üzerinden ulaşılabiliyor

SSS

  • “Doom çalıştırabilir mi?” → “Bir sayı olmadığı için çalıştıramaz”
  • “Hızlı mı?” → “Öklid'in bir nüshasını elle kopyalamaktan çok daha hızlı”
  • “Neden yapıldı?” → “İsteğe bağlı hassasiyetli aritmetik istiyordum ama aynı zamanda bir şeyler hissetmek de istiyordum

1 yorum

 
GN⁺ 2026-03-09
Hacker News yorumları
  • SSS biçimindeki şaka fazlasıyla relatable
    Özellikle “keyfi hassasiyetli aritmetik istedim ama aynı zamanda bir şeyler de hissetmek istedim” kısmı çok etkileyiciydi

    • Teşekkürler! Böyle hissettirmiş olmasına gerçekten çok sevindim
  • Gerçekten harika bir mizahi yazım ve projeydi
    “Yazdığım şeyi çalıştırmadan önce mutlaka kaydedin” cümlesi beni çok güldürdü
    Sadece biraz daha övgü eklemek istedim ve umarım 0x0mer bu tepkiden sıcak bir içsel ışık hissetmiştir

    • Teşekkürler! Ben de o sıcak enerjiyi kesinlikle hissediyorum
  • Kısa süre önce Ben Syversen kanalındaki ‘küpü iki katına çıkarma’ videosunu izledim ve pergel ve cetvelle hesap yapmayı ilk kez orada öğrendim

  • Bu projeyi paylaştığın için teşekkürler
    Bunu nasıl keşfettiğini merak ediyorum

    • CasNum, pergel ve cetvelle uygulanmış keyfi hassasiyetli bir aritmetik kütüphanesi
      “%100 daha fazla Öklid” ifadesi müthiş
  • Uygulamayı yalnızca pergelle daha da sadeleştirmek mümkün olabilir
    Bunun için Mohr–Mascheroni teoremi'ne bakılabilir

    • Napolyon'un da bu tür konulara çok ilgi duyduğu söylenir
      Mascheroni kitabını ona adamış ve Laplace'ın “ondan her şeyi bekliyordum ama geometri dersi vermesini değil” dediğine dair bir anekdot var
      İlgili yazı
  • Yalnızca BigInt'e dayanmadan büyük sayılarla çalışmak için ilginç bir yaklaşım
    10^9 tabanı kullanarak normal JavaScript sayılarıyla verimli işlemler yapılabiliyor ve bellek kullanımı da azaltılabiliyor
    Tarayıcı motorları ve Node sürümlerine göre BigInt ile benchmark karşılaştırmasının nasıl çıktığını merak ediyorum

  • “Bunu kendi ISA'nız gibi düşünün” ifadesi çok net ve göstergebilim açısından incelikli

  • reals kütüphanesi ile karşılaştırıldığında nasıl farklar çıkacağını merak ediyorum

    • CasNum performans açısından pek hızlı olmayabilir gibi görünüyor
  • Gerçekten çok hoş bir fikir
    Tüm oyun durumunu ve ROM'u düzlem üzerine yerleştirip, bir sonraki adımı o durumdan hesaplatmak mümkün olur mu diye merak ediyorum

    • Ben de bunu düşündüm
      Teorik olarak mümkün gibi duruyor ve ALU simülasyonundan daha da genişletilmiş bir biçimde uygulanabilir
      Ama bunu yapınca saflığın biraz azalacakmış gibi geliyor
      Bir başka fikir de pergel ve cetvelle oyun grafiklerini doğrudan çizmeyi denemek
  • Gerçekten çok sevimli bir proje

    • Teşekkürler!