जवाबों:
आप अभी भी साधारण अंकगणित से नंबर (NaN) मान प्राप्त नहीं कर सकते हैं inf:
>>> 0 * float("inf")
nan
ध्यान दें कि आपको सामान्य अंकगणितीय गणनाओं के माध्यम से सामान्य रूप से मान नहीं मिलेगा inf:
>>> 2.0**2
4.0
>>> _**2
16.0
>>> _**2
256.0
>>> _**2
65536.0
>>> _**2
4294967296.0
>>> _**2
1.8446744073709552e+19
>>> _**2
3.4028236692093846e+38
>>> _**2
1.157920892373162e+77
>>> _**2
1.3407807929942597e+154
>>> _**2
Traceback (most recent call last):
File "<stdin>", line 1, in ?
OverflowError: (34, 'Numerical result out of range')
infमूल्य असामान्य अर्थ विज्ञान के साथ एक बहुत ही खास मूल्य माना जाता है, इसलिए यह एक के बारे में पता करने के लिए बेहतर है OverflowErrorसीधे एक अपवाद के माध्यम से दूर, बल्कि एक की तुलना में infचुपचाप अपनी गणना में इंजेक्शन मूल्य।
**एक बालक छोटी गाड़ी लगता है। जब यह वास्तविक संख्याओं से अधिक हो जाता है, तो यह एक त्रुटि फेंकता है, लेकिन जब इसका कोई ऑपरेंड infया होता है -inf, तो यह 0.0या तो वापस आ जाता है inf। तो यह सही ढंग से काम करता है जब इनपुट निष्क्रिय होता है, लेकिन तब नहीं जब परिणाम अनंत होना चाहिए।
पायथन का कार्यान्वयन IEEE-754 मानक का अच्छी तरह से अनुसरण करता है , जिसे आप एक मार्गदर्शन के रूप में उपयोग कर सकते हैं, लेकिन यह अंतर्निहित प्रणाली पर निर्भर करता है जिस पर इसे संकलित किया गया था, इसलिए प्लेटफ़ॉर्म अंतर हो सकता है। हाल ही में, एक फिक्स लागू किया गया है जो "अनन्तता" के साथ-साथ "inf" की अनुमति देता है , लेकिन यहां मामूली महत्व है।
निम्नलिखित अनुभाग समान रूप से किसी भी भाषा पर लागू होते हैं जो IEEE फ़्लोटिंग पॉइंट अंकगणित को सही ढंग से लागू करता है, यह केवल पायथन के लिए विशिष्ट नहीं है।
अनन्तता और अधिक से अधिक >या कम से कम <ऑपरेटरों के साथ काम करते समय , निम्नलिखित मायने रखता है:
+inf से अधिक है-inf-infसे कम है+inf +infकी तुलना में न तो अधिक है और न ही कम है+inf-inf की तुलना में न तो अधिक है और न ही कम है -infNaNझूठी है ( infन तो अधिक है, न ही इससे कम है NaN)जब समानता के लिए तुलना की जाती है, +infऔर +infसमान होते हैं, जैसे हैं -infऔर -inf। यह एक बहुत ही विवादित मुद्दा है और यह आपको विवादास्पद लग सकता है, लेकिन यह IEEE मानक में है और पायथन ऐसा ही व्यवहार करता है।
निस्संदेह, +infअपने आप में -infऔर सब कुछ, जिसमें NaNस्वयं भी शामिल है, असमान है NaN।
अनन्तता के साथ अधिकांश गणनाएँ अनन्तता प्राप्त करेंगी, जब तक कि दोनों ऑपरेंड अनंत नहीं होते हैं, जब ऑपरेशन डिवीजन या मोडुलो, या शून्य के साथ गुणा करते हैं, तो ध्यान में रखने के लिए कुछ विशेष नियम हैं:
NaN0.0या ( -0.0।NaN।inf - inf, परिणाम अपरिभाषित है:NaN :;inf - -inf, परिणाम हैinf ;-inf - inf, परिणाम है-inf ;-inf - -inf, परिणाम अपरिभाषित है NaN:।inf + inf, परिणाम हैinf ;inf + -inf, परिणाम अपरिभाषित है:NaN :;-inf + inf, परिणाम अपरिभाषित है:NaN :;-inf + -inf, परिणाम है -inf।math.pow, powया **मुश्किल है, क्योंकि यह व्यवहार नहीं करना चाहिए जैसा कि इसे करना चाहिए। यह एक अतिप्रवाह अपवाद फेंकता है जब दो वास्तविक संख्याओं के साथ परिणाम एक डबल सटीक फ़्लोट (यह अनंतता लौटना चाहिए) फिट करने के लिए बहुत अधिक है, लेकिन जब इनपुट है infया -inf, यह सही ढंग से व्यवहार करता है या infया तो वापस आ जाता है 0.0। जब दूसरा तर्क होता है NaN, तो वह NaNतब तक लौटता है , जब तक कि पहला तर्क न हो 1.0। अधिक मुद्दे हैं, सभी डॉक्स में शामिल नहीं हैं ।math.expके रूप में एक ही मुद्दों से ग्रस्त है math.pow। अतिप्रवाह के लिए इसे ठीक करने का एक उपाय इसके समान कोड का उपयोग करना है:
try:
res = math.exp(420000)
except OverflowError:
res = float('inf')नोट 1: एक अतिरिक्त चेतावनी के रूप में, जैसा कि IEEE मानक द्वारा परिभाषित किया गया है, यदि आपकी गणना परिणाम के तहत या ओवरफ्लो होती है, तो परिणाम अंडर या ओवरफ्लो त्रुटि नहीं होगी, लेकिन सकारात्मक या नकारात्मक अनंत: 1e308 * 10.0पैदावारinf ।
नोट 2: क्योंकि NaNरिटर्न के साथ किसी भी गणना NaNऔर किसी भी तरह की तुलना NaN, NaNअपने आप में false, आपको यह math.isnanनिर्धारित करने के लिए फ़ंक्शन का उपयोग करना चाहिए कि क्या कोई संख्या वास्तव में है NaN।
नोट 3: हालांकि पायथन लेखन का समर्थन करता है float('-NaN'), फिर भी संकेत को अनदेखा किया जाता है, क्योंकि NaNआंतरिक रूप से कोई संकेत मौजूद नहीं है । यदि आप विभाजित करते हैं -inf / +inf, तो परिणाम है NaN, नहीं -NaN(ऐसी कोई बात नहीं है)।
नोट 4: उपरोक्त में से किसी पर भी भरोसा करने के लिए सावधान रहें, क्योंकि पायथन सी या जावा लाइब्रेरी पर निर्भर करता है जिसे इसके लिए संकलित किया गया था और सभी अंतर्निहित सिस्टम इस सभी व्यवहार को सही ढंग से लागू नहीं करते हैं। यदि आप सुनिश्चित होना चाहते हैं, तो अपनी गणना करने से पहले अनंत के लिए परीक्षण करें।
Version) हाल ही में संस्करण 3.2 के बाद से इसका मतलब है ।
²) फ्लोटिंग पॉइंट सकारात्मक और नकारात्मक शून्य का समर्थन करते हैं, इसलिए: x / float('inf')इसका संकेत और -1 / float('inf')पैदावार -0.0, 1 / float(-inf)पैदावार -0.0, 1 / float('inf')पैदावार 0.0और -1/ float(-inf)पैदावार रखता है 0.0। इसके अलावा, 0.0 == -0.0हैtrue , तो आप मैन्युअल संकेत जाँच करने के लिए यदि आप इसे सच हो नहीं करना चाहती है।
-1 * float('infinity') == -inf
तो C99 करता है ।
सभी आधुनिक प्रोसेसरों द्वारा उपयोग किए जाने वाले IEEE 754 फ़्लोटिंग पॉइंट प्रतिनिधित्व में कई विशेष बिट पैटर्न होते हैं जो सकारात्मक अनंत (संकेत = 0, exp = ~ 0, frac = 0), नकारात्मक अनंत (संकेत = 1, exp = ~ 0, frac = 0) के लिए आरक्षित होते हैं। ), और कई NaN (संख्या नहीं: exp = ~ 0, frac ≠ 0)।
आप सभी के बारे में चिंता करने की जरूरत है: कुछ अंकगणित अस्थायी बिंदु अपवाद / जाल का कारण हो सकता है, लेकिन वे केवल इन "दिलचस्प" स्थिरांक तक सीमित नहीं हैं।
OverflowError।
मुझे एक चेतावनी मिली जिसका अभी तक किसी ने उल्लेख नहीं किया है। मुझे नहीं पता कि यह व्यावहारिक स्थितियों में अक्सर आएगा, लेकिन यहां यह पूर्णता के लिए है।
आमतौर पर, एक नंबर मोडुल इनफिनिटी की गणना एक फ्लोट के रूप में की जाती है, लेकिन एक अंश मॉडुलो इन्फिनिटी रिटर्न nan(संख्या नहीं)। यहाँ एक उदाहरण है:
>>> from fractions import Fraction
>>> from math import inf
>>> 3 % inf
3.0
>>> 3.5 % inf
3.5
>>> Fraction('1/3') % inf
nan
मैंने पायथन बग ट्रैकर पर एक मुद्दा दायर किया। इसे https://bugs.python.org/issue32968 पर देखा जा सकता है ।
अपडेट: यह पायथन 3.8 में तय किया जाएगा ।
एक बहुत खराब गुफा: शून्य से डिवीजन
में 1/x अंश में, x = 1e-323यह ऊपर है infलेकिन जब x = 1e-324या थोड़ा इसे फेंकता हैZeroDivisionError
>>> 1/1e-323
inf
>>> 1/1e-324
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: float division by zero
इसलिए सतर्क रहें!
1e309रूप में व्याख्या की जाएगी+infऔर-1e309इसकी व्याख्या की जाएगी-inf।