इसका उत्तर "आश्चर्यजनक" सरल है:
पहला - जैसा कि आप में से अधिकांश जानते होंगे - एक 32-बिट पूर्णांक −2,147,483,648 से लेकर 2,147,483,647 तक होता है । तो, क्या होगा यदि PHP का परिणाम होता है, जो कि इससे LARGER है?
आमतौर पर, एक व्यक्ति को तत्काल "अतिप्रवाह" की उम्मीद होती है, जिससे 2,147,483,647 + 1 a2,147,483,648 हो जाते हैं । हालांकि, यह मामला नहीं है। यदि PHP एक बड़ी संख्या का सामना करता है, तो यह INT के बजाय FLOAT लौटाता है।
यदि PHP पूर्णांक प्रकार की सीमाओं से परे एक संख्या का सामना करता है, तो इसे एक फ्लोट के रूप में व्याख्या किया जाएगा। इसके अलावा, एक ऑपरेशन जिसके परिणामस्वरूप पूर्णांक प्रकार की सीमा से परे एक संख्या होती है, इसके बजाय एक फ्लोट लौटाएगा।
http://php.net/manual/en/language.types.integer.php
यह कहा गया है, और यह जानकर कि PHP FLOAT कार्यान्वयन IEEE 754 दोहरे परिशुद्धता प्रारूप का अनुसरण कर रहा है, इसका मतलब है, कि PHP 52 बिट तक की संख्या से निपटने में सक्षम है, बिना सटीकता खोए। (32-बिट सिस्टम पर)
तो, उस बिंदु पर, जहां आपका योग 9,007,199,254,740,992 (जो 2 ^ 53 है ) हिट करता है , PHP मैथ्स द्वारा लौटाया गया फ्लोट मान अब पर्याप्त रूप से सटीक नहीं होगा।
E:\PHP>php -r "$x=bindec(\"100000000000000000000000000000000000000000000000000000\"); echo number_format($x,0);"
9.007.199.254.740.992
E:\PHP>php -r "$x=bindec(\"100000000000000000000000000000000000000000000000000001\"); echo number_format($x,0);"
9.007.199.254.740.992
E:\PHP>php -r "$x=bindec(\"100000000000000000000000000000000000000000000000000010\"); echo number_format($x,0);"
9.007.199.254.740.994
यह उदाहरण उस बिंदु को दिखाता है, जहां PHP सटीक खो रहा है। सबसे पहले, अंतिम महत्त्वपूर्ण बिट को गिरा दिया जाएगा, जिससे पहले 2 भाव समान संख्या में परिणाम होंगे - जो वे नहीं हैं।
अब से, डिफ़ॉल्ट डेटा-प्रकारों के साथ काम करने पर पूरा गणित गलत हो जाएगा।
• क्या अन्य व्याख्यात्मक भाषा जैसे कि पायथन या पर्ल के लिए भी यही समस्या है?
मुझे ऐसा नहीं लगता। मुझे लगता है कि यह उन भाषाओं की समस्या है जिनकी कोई प्रकार-सुरक्षा नहीं है। हालांकि एक पूर्णांक ओवरफ्लो जैसा कि ऊपर उल्लेख किया गया है, हर भाषा में होता है जो निश्चित डेटा प्रकारों का उपयोग करता है, बिना टाइप-सुरक्षा वाली भाषाएं इसे अन्य डेटाटिप्स के साथ पकड़ने की कोशिश कर सकती हैं। हालांकि, एक बार जब उन्होंने अपनी "प्राकृतिक" (सिस्टम-दी गई) सीमा को मार दिया - वे कुछ भी वापस कर सकते हैं, लेकिन सही परिणाम।
हालाँकि, प्रत्येक भाषा में ऐसे परिदृश्य के लिए अलग थ्रेडिंग हो सकती है।