फ़्लोटिंग पॉइंट नंबरों को स्मृति में आधार 2 बाइनरी अंश के रूप में दर्शाया जाता है। परिणामस्वरूप फ्लोटिंग पॉइंट अंकगणितीय ऑपरेशन कई बार अजीब हो सकते हैं। 0.1 और 0.2 का जोड़ निम्न प्रकार से कष्टप्रद परिणाम दे सकता है -
>>> 0.1 + 0.2 0.30000000000000004
वास्तव में यह बाइनरी फ्लोटिंग पॉइंट प्रतिनिधित्व की प्रकृति है। यह किसी भी प्रोग्रामिंग भाषा में प्रचलित है। पायथन तेजी से और सही ढंग से गोल फ्लोटिंग-पॉइंट अंकगणितीय प्रदर्शन करने के लिए एक दशमलव मॉड्यूल प्रदान करता है।
दशमलव मॉड्यूल को फ़्लोटिंग पॉइंट्स का प्रतिनिधित्व करने के लिए डिज़ाइन किया गया है जैसा कि कोई उन्हें व्यवहार करना चाहता है, और अंकगणितीय ऑपरेशन परिणाम अपेक्षाओं के अनुरूप हैं। प्रतिनिधित्व और संचालन का सटीक स्तर 28 स्थानों तक सेट किया जा सकता है।
दशमलव मॉड्यूल दशमलव वर्ग को परिभाषित करता है। दशमलव वस्तु को एक पूर्णांक, संख्यात्मक प्रतिनिधित्व के साथ एक स्ट्रिंग या इसके निर्माता को पैरामीटर के रूप में एक टपल देकर घोषित किया जा सकता है
>>> from decimal import Decimal >>> d1 = Decimal(10) >>> d1 Decimal('10') >>> d2 = Decimal('10') >>> d2 Decimal('10')
एक टपल पैरामीटर में तीन तत्व होते हैं, चिह्न (सकारात्मक के लिए 0, ऋणात्मक के लिए 1), अंकों का एक टपल और घातांक। उदाहरण के लिए
>>> d3 = Decimal((1, (1, 2,3, 4), 2)) >>> d3 Decimal('-1.234E+5')
एक विशिष्ट परिशुद्धता के फ़्लोटिंग पॉइंट नंबर का प्रतिनिधित्व करने का एक और सुविधाजनक तरीका getcontext() finction द्वारा वर्तमान थ्रेड का संदर्भ वातावरण प्राप्त करना और दशमलव ऑब्जेक्ट के लिए सटीकता सेट करना है।
>>> from decimal import Decimal, getcontext >>> getcontext().prec = 5 >>> d3 = Decimal(10) >>> d4 = Decimal(3) >>> d3/d4 Decimal('3.3333')
संदर्भ अंकगणितीय संक्रियाओं के लिए परिवेश हैं जिनका उपयोग सटीकता को निर्धारित करने और गोलाई नियमों को परिभाषित करने के साथ-साथ घातांक के लिए सीमा को सीमित करने के लिए किया जाता है।
decimal.getcontext() - सक्रिय थ्रेड के लिए वर्तमान संदर्भ लौटाएं।
decimal.setcontext(c) - सक्रिय थ्रेड के लिए वर्तमान संदर्भ को c पर सेट करें।
निम्नलिखित राउंडिंग मोड स्थिरांक दशमलव मॉड्यूल में परिभाषित किए गए हैं -
ROUND_CEILING | अनंत की ओर गोल। |
ROUND_DOWN | शून्य की ओर गोल करें। |
ROUND_FLOOR | गोल - अनंत की ओर। |
ROUND_HALF_DOWN | शून्य की ओर जा रहे संबंधों के साथ निकटतम के लिए गोल करें। |
ROUND_HALF_EVEN | निकटतम सम पूर्णांक में जाने वाले संबंधों के साथ निकटतम के लिए गोल करें। |
ROUND_HALF_UP | शून्य से दूर जाने वाले संबंधों के साथ निकटतम तक गोल करें। |
ROUND_UP | शून्य से दूर। |
ROUND_05UP | शून्य से पूर्णांकित करें यदि शून्य की ओर पूर्णांकित करने के बाद अंतिम अंक 0 या 5 होता; अन्यथा शून्य की ओर गोल। |
निम्नलिखित कोड स्निपेट संदर्भ वस्तु के सटीक और गोलाई मापदंडों का उपयोग करता है
>>> from decimal import * >>> getcontext().prec = 5 >>> getcontext().rounding = ROUND_UP >>> d1 = Decimal(100) >>> d2 = Decimal(6) >>> d1/d2 Decimal('16.667')
दशमलव वस्तुओं पर अंकगणितीय संचालन
सभी सामान्य अंकगणितीय ऑपरेशन दशमलव वस्तुओं पर किए जाते हैं, सामान्य फ़्लोट्स की तरह।
>>> a = Decimal('2.4') >>> b = Decimal('1.2') >>> a + b Decimal('3.6') >>> a - b Decimal('1.2') >>> b - a Decimal('-1.2') >>> a * b Decimal('2.88') >>> a / b Decimal('2')
अंकगणितीय संक्रिया एक दशमलव संकार्य और एक पूर्णांक संकार्य पर की जा सकती है। हालांकि सामान्य फ़्लोटिंग पॉइंट ऑब्जेक्ट ऑपरेशंस अमान्य हैं।
>>> a = Decimal('2.4') >>> c = 2.1 >>> a + c Traceback (most recent call last): File "<pyshell#37>", line 1, in <module> a+c TypeError: unsupported operand type(s) for +: 'decimal.Decimal' and 'float'
सभी अंकगणितीय संक्रियाओं के लिए एक ही अपवाद होता है।
दशमलव वस्तु के साथ शेष (%) ऑपरेटर का व्यवहार सामान्य संख्यात्मक प्रकारों से थोड़ा अलग होता है। यहां, परिणाम का संकेत भाजक के बजाय लाभांश का है
>>> -7%3 2 >>> 7%-3 -2 >>> Decimal(-7) % Decimal(3) Decimal('-1') >>> Decimal(7) % Decimal(-3) Decimal('1')
दशमलव.from_float() - यह फ़ंक्शन सटीक बाइनरी प्रतिनिधित्व के साथ सामान्य फ्लोट को दशमलव ऑब्जेक्ट में परिवर्तित करता है। परिणामस्वरूप from_float(0.1) और Decimal('0.1') समान नहीं हैं।
>>> d1 = Decimal('0.1') >>> d2 = Decimal.from_float(0.1) >>> d1,d2 (Decimal('0.1'), Decimal('0.1000000000000000055511151231257827021181583404541015625'))
यह लेख पायथन मानक पुस्तकालय के दशमलव मॉड्यूल में परिभाषित कार्यक्षमता के उपयोग की व्याख्या करता है।