2011-08-05 15 views
7

मैं वर्तमान में PHP में मनमानी-परिशुद्धता संख्याओं के साथ काम करने का तरीका जानने का प्रयास कर रहा हूं। तो मुझे लगता है कि मेरा पहला सवाल वास्तव में मनमाना-सटीक गणित क्या होगा। मैंने एक अच्छी परिभाषा के लिए गूगलिंग की कोशिश की लेकिन किसी कारण से कोई भी इसे पर्याप्त शब्दों में नहीं डाल सकता है।PHP में मनमानी-प्रेसिजन मठ

दूसरा, PHP में बीसीएमएथ और जीएमपी पुस्तकालयों के बीच अंतर क्या हैं? मैंने दावा किया है कि जीएमपी का एपीआई "ताजा" है, लेकिन idk। क्या एक बेहतर है?

और मेरा अंतिम प्रश्न यह होगा कि बीसीएमएथ/जीएमपी किस प्रकार की संख्या लेता है। स्पष्ट रूप से यह स्ट्रिंग फॉर्म (जैसे "5.34") में सामान्य पूर्णांक लेता है, लेकिन मैंने कार्यान्वयन देखा है जहां बीसीएमएथ फ़ंक्शंस को नियमित पूर्णांक (जैसे "\ x12 \ x23 \ x45 \ x67") का प्रतिनिधित्व करने वाले ऑक्टेट स्ट्रिंग के साथ सीधे उपयोग किया गया है, जिसे मैं "bigint" कहा जाता है के रूप में सुना है, लेकिन फिर से Google ने मेरे लिए कुछ भी नहीं दिया है।

+0

सिद्धांत रूप में दोनों के रूप में वे तारों के रूप में पुस्तकालय में खिलाया रहे हैं किसी भी लम्बाई की संख्या में इस्तेमाल किया जा करने की अनुमति है, जब तक। यह आपके उद्देश्यों के लिए निचला एपीआई है जो भी नीचे उबलता है। बीसी तारों के साथ पूरी तरह से काम करता है, जबकि जीएमपी स्ट्रिंग स्वीकार कर सकता है लेकिन इसके आंतरिक प्रतिनिधित्व भी करता है। –

+0

नोट: मनमाने ढंग से सटीक अंकगणित के साथ काम करने के लिए, आप [ईंट/गणित] (https://github.com/brick/math) जैसी लाइब्रेरी का उपयोग कर सकते हैं जो स्वचालित रूप से दृश्यों के पीछे जीएमपी, बीसीएमथ, या यहां तक ​​कि सादे PHP का उपयोग करता है , प्रत्येक एक्सटेंशन की उपलब्धता के आधार पर। इस तरह आपको जीएमपी और बीसीएमथ के बीच चयन करने की ज़रूरत नहीं है, और इसके साथ खेलने के लिए एक अच्छा ओओ एपीआई है। – Benjamin

उत्तर

12

मनमाने ढंग से सटीक गणित क्या है?
मनमाने ढंग से सटीक अंकगणित उर्फ ​​"बिग्नम गणित", संख्याओं पर अंकगणितीय परिचालन करने का एक तरीका प्रस्तुत करता है जो संख्याओं की संख्या केवल स्मृति की मात्रा से सीमित होती है। यह तय परिशुद्धता गणित जो मेजबान सिस्टम के सीपीयू/ALUs और जहां अधिकतम आकार/संख्या में प्रतिनिधित्व की परिशुद्धता इन हार्डवेयर प्रोसेसर के रजिस्टरों की बिट्स की संख्या का एक कारक है द्वारा प्रदान किया जाता है के साथ प्रस्थान में है।

फिक्स्ड परिशुद्धता गणित, तेजी से भंडारण के संबंध में कुशल है और यह अंतर्निहित है/सार्वभौमिक रूप से उपलब्ध। हालांकि यह सीमित (यदि कभी-कभी कभी-कभी "काफी बड़ा") संख्यात्मक सीमाओं पर लागू होता है। मनमाने ढंग से सटीक अंकगणित धीमा है, भंडारण के कुछ हद तक अपर्याप्त है और जीएमपी या बीसीएमथ जैसे विशेष पुस्तकालयों की आवश्यकता है।

क्या BCMath और जीएमपी पुस्तकालयों के बीच मतभेद
सबसे प्रमुख अंतर यह है कि जीएमपी [मनमाना परिशुद्धता] पूर्णांक मूल्यों, जिससे BCMath [मनमाना परिशुद्धता] की अनुमति देता है दशमलव/नाव पर काम करता है है मूल्यों के समान।
न तो एपीआई जानने के लिए मुश्किल है, लेकिन BCMath थोड़ा अधिक सहज ज्ञान युक्त (अलावा नाव की तरह मानों का समर्थन करने) हो सकता है

एक और एक आम तौर पर इच्छित उपयोग के द्वारा संचालित है पर एक विशेष पुस्तकालय में से एक का चयन (या किसी दिए गए प्लेटफॉर्म पर उपलब्धता से)। जब तक आप एमपी अनुप्रयोगों में भारी न हो जाएं, अधिकांश लाइब्रेरी बिल फिट करेगी और आम तौर पर समकक्ष होगी (पाठ्यक्रम की कक्षा के भीतर, यानी अगर आपको फ्लोटिंग पॉइंट नंबर की आवश्यकता है तो पूर्णांक-लाइब्रेरी से बचें)।

बीसीएमएथ/जीएमपी किस प्रकार की संख्या लेता है?
सबसे मनमाना परिशुद्धता गणित संकुल के साथ के रूप में, इन दो पुस्तकालयों के अपने एपीआई के लिए तार का उपयोग करें, अर्थात उनके इनपुट और आउटपुट संख्यात्मक मान का प्रतिनिधित्व करने के लिए।
आंतरिक रूप से ... जीएमपी जैसे कुछ पैकेज संख्याओं के लिए अपना स्वयं का प्रतिनिधित्व करते हैं। इस तरह के संरचनाओं का विशिष्ट रूप से भंडारण आवश्यकताओं को कम करने और तेजी से गणना करने की अनुमति देता है (जिसमें पाठ फ़ाइलों से/से ऐसी संरचनाओं को "धारावाहिक/deserializing" शामिल है।)
उदाहरण में "\x12\x23\x45\x67" उदाहरण BCD यानी बाइनरी कोडेड दशमलव। यह प्रति बाइट 2 दशमलव अंक संग्रहीत करने की अनुमति देता है और कभी-कभी मनमानी प्रेसिजन अंकगणितीय पुस्तकालयों द्वारा उपयोग किया जाता है।

+0

उत्तर के लिए धन्यवाद! मेरे पास स्पष्ट करने के लिए केवल दो और चीजें हैं। नियमित पूर्णांक पर बीसीडी का उपयोग करने का कोई कारण है? और बीसीएमएथ और जीएमपी दोनों बीसीडी के साथ-साथ नियमित पूर्णांक [/ बीसीएमएथ के लिए फ्लोट] स्वीकार करते हैं? – parent5446

+0

न तो बीसीएमएथ और न ही जीएमपी बीसीडी में व्यक्त मूल्य स्वीकार करते हैं। बीसीडी का लाभ (एक अंक या विशेष चरित्र जैसे डॉट या माइनस साइन इत्यादि के साथ तारों की तुलना में) यह है कि बीसीडी अधिक कॉम्पैक्ट है: प्रति बाइट 1-अंकों की तुलना में 2-रेदर स्टोर करता है, जबकि संख्या के प्रतिनिधित्व के लिए आसानी से मैपबल रहता है (संख्या में एक विशेष अंक बिल्कुल एक और केवल एक निबल से मेल खाता है)। बीसीडी का एक दोष यह है कि इसे सी स्ट्रिंग्स में प्रदर्शित नहीं किया जा सकता है (2 शून्यों के संभावित अवसर की वजह से जो शून्य टर्मिनेटर से भ्रमित हो जाते हैं। – mjv

+0

आमतौर पर, _you_ बीसीडी का उपयोग नहीं करना चाहता/चाहती है, लेकिन यह प्रारूप कभी-कभी एक होता है मनमाने ढंग से सटीक अंकगणितीय पुस्तकालयों का आंतरिक प्रारूप, और इसका उपयोग विशेष अनुप्रयोगों के लिए भी किया जाता है। – mjv

4

जीएमपी तेजी से बीसीएमथ का एक टन है, हालांकि बीसीएमएथ ओपनएसएसएल का उपयोग करके तेजी से बना है। यहाँ एक बेंचमार्क विभिन्न तकनीकों की तुलना है:

http://phpseclib.sourceforge.net/math/intro.html

संबंधित मुद्दे