मैं C या C ++ में एक अच्छी मनमानी सटीक गणित पुस्तकालय की तलाश में हूं। क्या आप मुझे कुछ सलाह या सुझाव दे सकते हैं?
प्राथमिक आवश्यकताएँ:
यह मनमाने ढंग से बड़े पूर्णांकों को संभालना चाहिए - मेरी प्राथमिक रुचि पूर्णांकों पर है। यदि आपको पता नहीं है कि मनमाने ढंग से बड़े शब्द का क्या अर्थ है, तो 100000 जैसी किसी चीज़ की कल्पना करें! (१००००० का तथ्य)।
लाइब्रेरी इनिशियलाइज़ेशन या ऑब्जेक्ट निर्माण के दौरान सटीक को निर्दिष्ट करने की आवश्यकता नहीं है । सटीक को केवल सिस्टम के उपलब्ध संसाधनों से विवश होना चाहिए ।
इसे मंच की पूरी शक्ति का उपयोग करना चाहिए , और मूल रूप से "छोटी" संख्या को संभालना चाहिए। इसका मतलब है कि 64-बिट प्लेटफ़ॉर्म पर, गणना करना (2 ^ 33 + 2 ^ 32) उपलब्ध 64-बिट सीपीयू निर्देशों का उपयोग करना चाहिए। पुस्तकालय को उसी तरह से इसकी गणना नहीं करनी चाहिए, जैसा कि एक ही मंच पर (2 ^ 66 + 2 ^ 65) के साथ करता है।
यह चाहिए कुशलतापूर्वक अलावा संभाल (
+
), घटाव (-
), गुणा (*
), पूर्णांक प्रभाग (/
), शेष (%
), बिजली (**
), वेतन वृद्धि (++
), घटती (--
), GCD, अंकगणितीय गणना पूर्णांक भाज्य, और अन्य सामान्य। वर्गाकार परिणाम उत्पन्न न करने वाले वर्गमूल और लघुगणक जैसे कार्यों को संभालने की क्षमता एक से अधिक है। प्रतीकात्मक संगणना को संभालने की क्षमता और भी बेहतर है।
यहाँ मैं अब तक क्या पाया है:
Java का BigInteger और BigDecimal वर्ग: मैं अब तक इनका उपयोग कर रहा हूं। मैंने सोर्स कोड पढ़ा है, लेकिन मुझे गणित समझ में नहीं आया है। यह उन सिद्धांतों और एल्गोरिदम पर आधारित हो सकता है जो मैंने कभी नहीं सीखा।
अंतर्निहित पूर्णांक प्रकार या bc , Python , Ruby , Haskell , Lisp , Erlang , OCaml , PHP , कुछ अन्य भाषाओं के मुख्य पुस्तकालयों में : मैंने इनमें से कुछ का उपयोग किया है, लेकिन मुझे पता नहीं है कि वे जिस पुस्तकालय का उपयोग कर रहे हैं, या वे किस तरह के कार्यान्वयन का उपयोग कर रहे हैं।
जो मैंने पहले ही जाना है:
char
दशमलव अंकों के लिए औरchar*
दशमलव तार के लिए उपयोग कर रहे हैं, और एकfor
लूप का उपयोग करके अंकों पर गणना करते हैं ।का उपयोग करते हुए
int
(याlong int
, याlong long
) एक बुनियादी "इकाई" और एक मनमाना लंबे पूर्णांक के रूप में उस प्रकार की एक सरणी के रूप में, और एक का उपयोग कर तत्वों पर गणना करनेfor
-loop।BCD (बाइनरी-कोडित दशमलव) के रूप में एक दशमलव अंक (या कुछ अंक) को संग्रहीत करने के लिए पूर्णांक प्रकार का उपयोग करना ।
मैं क्या नहीं जानता:
- भोले तरीकों का उपयोग किए बिना दशमलव में ऊपर वर्णित बाइनरी सरणी को प्रिंट करना। एक भोली विधि का एक उदाहरण: (1) बिट्स को निम्नतम से सबसे अधिक जोड़ते हैं: 1, 2, 4, 8, 16, 32,… (2)
char*
मध्यवर्ती दशमलव परिणामों को संग्रहीत करने के लिए ऊपर वर्णित एक स्ट्रिंग का उपयोग करें )।
मैं क्या सराहना करता हूं:
जीएमपी , एमपीएफआर , डिकंनम्बर (या अन्य पुस्तकालय जो आपकी राय में अच्छे हैं) पर अच्छी तुलना ।
पुस्तकों और लेखों पर अच्छे सुझाव जो मुझे पढ़ने चाहिए। उदाहरण के लिए, गैर-भोले द्विआधारी से दशमलव रूपांतरण एल्गोरिदम कैसे काम करता है, इस पर आंकड़े के साथ एक चित्रण अच्छा होगा। डगलस डब्ल्यू। जोन्स द्वारा लेख " बाइनरी टू डेसीमल कनवर्ज़न इन लिमिटेड प्रिसिजन " एक अच्छे लेख का एक उदाहरण है।
सामान्य तौर पर कोई मदद।
कृपया इस प्रश्न का उत्तर न दें यदि आपको लगता है कि उपयोग double
(या long double
, long long double
) इस समस्या को आसानी से हल कर सकता है। यदि आप ऐसा सोचते हैं, तो आप प्रश्न में समस्या को नहीं समझते हैं।