pi
पायथन फ्लोट (प्लेटफॉर्म सी के double
प्रकार के समान) के रूप में बिल्कुल प्रतिनिधित्व योग्य नहीं है । निकटतम प्रतिनिधित्व योग्य सन्निकटन का उपयोग किया जाता है।
यहाँ मेरे बॉक्स पर उपयोग में सटीक सन्निकटन है (शायद आपके बॉक्स पर भी ऐसा ही हो):
>>> import math
>>> (math.pi / 2).as_integer_ratio()
(884279719003555, 562949953421312)
उस अनुपात की स्पर्शरेखा को खोजने के लिए, मैं अब wxMaxima पर स्विच करने जा रहा हूं:
(%i1) fpprec: 32;
(%o1) 32
(%i2) tan(bfloat(884279719003555) / 562949953421312);
(%o2) 1.6331239353195369755967737041529b16
इतना अनिवार्य रूप से आप क्या मिला के समान है। pi/2
प्रयुक्त बाइनरी सन्निकटन गणितीय ("अनंत परिशुद्धता") के मूल्य से थोड़ा कम है pi/2
। तो आपको इसके बजाय एक बहुत बड़ी स्पर्शरेखा मिलती है infinity
। गणना tan()
वास्तविक इनपुट के लिए उपयुक्त है!
ठीक उसी प्रकार के कारणों के लिए, जैसे,
>>> math.sin(math.pi)
1.2246467991473532e-16
0. वापस नहीं करता है। अनुमान math.pi
से थोड़ा सा कम है pi
, और प्रदर्शित परिणाम सही है कि सत्य दिया गया है।
गणित के अन्य तरीके
उपयोग में सटीक अनुमान देखने के कई तरीके हैं:
>>> import math
>>> math.pi.as_integer_ratio()
(884279719003555, 281474976710656)
math.pi
उस अनुपात के गणितीय ("अनंत परिशुद्धता") मूल्य के बराबर है।
या हेक्स अंकन में एक सटीक फ्लोट के रूप में:
>>> math.pi.hex()
'0x1.921fb54442d18p+1'
या एक तरह से सबसे आसानी से सभी के बारे में आसानी से समझ में आता है:
>>> import decimal
>>> decimal.Decimal(math.pi)
Decimal('3.141592653589793115997963468544185161590576171875')
हालांकि यह तुरंत स्पष्ट नहीं हो सकता है, प्रत्येक परिमित बाइनरी फ्लोट बिल्कुल परिमित दशमलव फ्लोट के रूप में प्रतिनिधित्व करने योग्य है (रिवर्स सच नहीं है; जैसे दशमलव 0.1
एक परिमित बाइनरी फ्लोट के रूप में बिल्कुल प्रतिनिधित्व योग्य नहीं है), और Decimal(some_float)
निर्माता सटीक समकक्ष पैदा करता है।
यहां pi
सटीक दशमलव मान का अनुसरण किया गया है math.pi
, और तीसरी पंक्ति पर एक कैरेट पहले अंक की ओर इशारा करता है जहां वे भिन्न हैं:
true 3.14159265358979323846264338327950288419716939937510...
math.pi 3.141592653589793115997963468544185161590576171875
^
math.pi
अब "लगभग सभी" बॉक्स में समान है, क्योंकि लगभग सभी बॉक्स अब एक ही बाइनरी फ्लोटिंग-पॉइंट प्रारूप (IEEE 754 डबल परिशुद्धता) का उपयोग करते हैं। आप ऊपर दिए गए किसी भी तरीके का उपयोग इस बात की पुष्टि करने के लिए कर सकते हैं कि आपके बॉक्स में, या उपयोग में सटीक अनुमान लगाने के लिए कि क्या आपका बॉक्स अपवाद है।