CasNum - कंपास और straightedge से arbitrary-precision arithmetic लाइब्रेरी
(github.com/0x0mer)- कंपास और straightedge constructions पर आधारित arbitrary-precision arithmetic को लागू करने वाली एक Python लाइब्रेरी, जिसमें सभी ऑपरेशन ज्यामितीय constructions से किए जाते हैं
- हर संख्या को समतल पर एक बिंदु के रूप में व्यक्त किया जाता है, और जोड़, गुणा, लॉजिक ऑपरेशन सभी को construction rules से लागू किया जाता है
- Game Boy emulator (PyBoy) के अंदर ALU को CasNum से बदलकर, केवल ज्यामितीय ऑपरेशनों से गेम चलाया जा सकता है
- इसमें RSA उदाहरण और Game Boy integration उदाहरण शामिल हैं, और visualization viewer के जरिए construction प्रक्रिया को रीयल-टाइम में देखा जा सकता है
- यह MIT लाइसेंस के तहत जारी है, और इसमें PyBoy(LGPL v3) तथा 2048.gb(zlib लाइसेंस) को संशोधित कर शामिल किया गया है
CasNum परिचय
-
CasNum एक Python लाइब्रेरी है जो कंपास और straightedge construction (compass and straightedge) का उपयोग करके arbitrary-precision arithmetic करती है
- हर संख्या
xको समतल पर बिंदु(x, 0)के रूप में दर्शाया जाता है - जोड़ को दो बिंदुओं का मध्यबिंदु खोजकर उसे दोगुना विस्तार देने की विधि से लागू किया जाता है
- गुणा और भाग को त्रिभुजों की समानता के सिद्धांत का उपयोग करके निर्मित किया जाता है
- लॉजिक ऑपरेशन (AND, OR, XOR) भी ज्यामितीय रूप से लागू किए गए हैं
- हर संख्या
-
मूल construction engine
cas/डायरेक्टरी में है, और यह निम्न पाँच मूल constructions को सपोर्ट करता है- दो बिंदुओं से गुजरने वाली रेखा
- एक बिंदु को केंद्र और दूसरे बिंदु से गुजरने वाला वृत्त
- दो रेखाओं का प्रतिच्छेद बिंदु
- रेखा और वृत्त का प्रतिच्छेद बिंदु
- दो वृत्तों का प्रतिच्छेद बिंदु
-
इन construction operations के आधार पर CasNum class परिभाषित की गई है, जो सभी arithmetic और logic operations को ज्यामितीय रूप से करती है
प्रमुख फीचर्स और optimization
- गुणा, भाग, modulo ऑपरेशन आदि को त्रिभुज समानता और ज्यामितीय संबंधों का उपयोग करके लागू किया गया है
- कुछ विशेष ऑपरेशन (जैसे 2 से गुणा) सामान्य एल्गोरिदम की तुलना में अधिक कुशलता से किए जा सकते हैं
- Python के
lru_cacheका उपयोग कर ऑपरेशन परिणाम cache किए जाते हैं, जिससे दोबारा उपयोग पर गति बेहतर होती है - cache के कारण memory usage काफी बढ़ सकता है, इसलिए सावधानी जरूरी है
उपयोग के उदाहरण
-
RSA encryption प्रोग्राम का implementation
-
Game Boy emulator (PyBoy) के ALU में integration, ताकि सभी ऑपरेशन CasNum से बदल दिए जाएँ
opcodes_gen.pyफ़ाइल में केवल न्यूनतम बदलाव- Pokémon Red जैसे ROM चलाए जा सकते हैं (हालाँकि boot होने में लगभग 15 मिनट लगते हैं)
- दूसरी run से cache की वजह से लगभग 0.5~1 FPS पर चलता है
-
examples/डायरेक्टरी में RSA और Game Boy उदाहरण शामिल हैं -
visualization viewer (
casnum/cas/viewer.py) के जरिए construction प्रक्रिया को रीयल-टाइम में देखा जा सकता है
दर्शन और प्रदर्शन
- साधारण
a + bऑपरेशन की जगह, रेखाओं और वृत्तों के प्रतिच्छेद से मध्यबिंदु खोजने की प्रक्रिया को सीधे लागू करने वाली डेवलपर मानसिकता पर ज़ोर - इसमें यह दार्शनिक मज़ाक भी है: “अगर 4th-degree equation हल किए बिना loop counter नहीं बढ़ा सकते, तो वह सचमुच increment नहीं है”
- Time complexity: Yes / Space complexity: Also yes जैसे वाक्य के माध्यम से, computation cost के बहुत अधिक होने को व्यंग्यात्मक ढंग से व्यक्त किया गया है
dependencies और लाइसेंस
- अनिवार्य dependency:
sympy - वैकल्पिक dependencies:
pyglet(visualization के लिए),pytest-lazy-fixtures(testing के लिए),pycryptodome(RSA उदाहरण के लिए) - MIT लाइसेंस के तहत वितरित
- शामिल third-party components
- PyBoy (modified version): LGPL v3.0
- 2048.gb ROM: zlib लाइसेंस
- PyBoy को CasNum उपयोग करने के लिए संशोधित किया गया है, और मूल संस्करण Baekalfen/PyBoy पर देखा जा सकता है
FAQ
- “क्या यह Doom चला सकता है?” → “नहीं, क्योंकि यह एक संख्या है”
- “क्या यह तेज़ है?” → “Euclid की प्रति हाथ से नकल करने से तो कहीं ज़्यादा तेज़ है”
- “यह क्यों बनाया?” → “मुझे arbitrary-precision arithmetic चाहिए था, लेकिन साथ ही कुछ महसूस भी करना था”
1 टिप्पणियां
Hacker News की राय
FAQ स्टाइल वाला मज़ाक बहुत relatable लगा
खासकर “arbitrary-precision arithmetic चाहिए था, लेकिन भावनाएँ भी महसूस करना चाहता था” वाला हिस्सा काफ़ी असरदार था
यह वाकई शानदार हास्यपूर्ण लेखन और प्रोजेक्ट था
“मैंने जो लिखा है, उसे चलाने से पहले ज़रूर सेव कर लें” वाली पंक्ति बहुत मज़ेदार थी
बस थोड़ी और तारीफ़ जोड़ना चाहता था, और उम्मीद है 0x0mer को इस प्रतिक्रिया से भीतर एक गर्म आंतरिक रोशनी महसूस हुई होगी
मैंने हाल ही में Ben Syversen चैनल का ‘Doubling a Cube’ वीडियो देखा, और तभी पहली बार compass और straightedge से calculation करने का तरीका सीखा
यह प्रोजेक्ट शेयर करने के लिए धन्यवाद
जानना चाहता हूँ कि आपको यह कैसे मिला
“100% more Euclid” वाली अभिव्यक्ति बहुत शानदार है
शायद implementation को सिर्फ compass तक सरल किया जा सकता है
इसके लिए Mohr–Mascheroni theorem देख सकते हैं
Mascheroni ने अपनी किताब उन्हें समर्पित की थी, और एक किस्सा है कि Laplace ने कहा था, “मैं उससे हर चीज़ की उम्मीद करता था, लेकिन geometry lessons की नहीं”
संबंधित लेख
सिर्फ
BigIntपर निर्भर हुए बिना बड़े नंबर संभालने का यह दिलचस्प तरीका है10^9 base का इस्तेमाल करके सामान्य JavaScript numbers से efficient operations किए जा सकते हैं, और memory usage भी घट सकता है
browser engines और Node versions के हिसाब से
BigIntके साथ benchmark comparison देखना दिलचस्प होगा“इसे अपना ISA समझें” वाली अभिव्यक्ति बहुत साफ़ और semiotically refined लगी
reals library से तुलना करें तो फर्क क्या होगा, यह जानने की उत्सुकता है
यह सचमुच बहुत शानदार आइडिया है
क्या पूरे game state और ROM को plane पर रखकर, उसी state से अगला step compute कराया जा सकता है? यह जानने की उत्सुकता है
सैद्धांतिक रूप से यह संभव लगता है, और इसे ALU simulation से भी आगे बढ़े हुए रूप में बनाया जा सकता है
लेकिन ऐसा करने पर शायद इसकी शुद्धता थोड़ी कम हो जाएगी
एक और आइडिया यह है कि compass और straightedge से game graphics सीधे draw करने की कोशिश की जाए
यह सच में बहुत प्यारा प्रोजेक्ट है