payment by upi: sinhamit@icici or payment by bank account name: amit kumar sinha, account number: 2646728782 IFSC code: KKBK0005660 SWIFT: KKBKINBB

Please support if you like my work by payment through upi: sinhamit@icici or payment by bank

account name: Amit Kumar Sinha,
account number: 2646728782
IFSC code: KKBK0005660
SWIFT: KKBKINBB


Numbers with Decimal Points   in Category: पीएचपी   by amit

🕙 Posted on 2023-05-04 at 00:45:37


फ़्लोट्स और गणितीय ऑपरेटर्स

    फ्लोट (float) या डबल (double) जिसे फ्लोटिंग पॉइंट नंबर के रूप में भी जाना जाता है भिन्नात्मक (fractional: तर्कसंगत rational या अपरिमेय irrational) दशमलव संख्याएँ हैं। पिछले पृष्ठ में, आपने सीखा है कि दशमलव संख्याएँ आधार 10 (base 10) की होती हैं , अर्थात ये संख्याएँ 0 से 9 तक के अंकों से बनी होती हैं। बाइनरी नंबर base 2 के होते हैं, ऑक्टल नंबर base 8 के होते हैं, और हेक्साडेसिमल नंबर base 16 के होते हैं।

    पूर्णांक Integers (जो इन सभी आधारों में प्रदर्शित किए जा सकते हैं), कंप्यूटर मेमोरी (RAM) में बाइनरी सिस्टम में संग्रहीत होते हैं। हालाँकि, उसी तरह से फ्लोट या भिन्नात्मक (fractional) संख्याओं को संग्रहीत करना संभव नहीं है। इसलिए, कंप्यूटर इंजीनियरों और डेवलपर्स ने फ्लोट्स को आंतरिक रूप से स्टोर करने के लिए एक अलग तरीका अपनाया था। और, इस प्रकार, फ़्लोटिंग पॉइंट नंबर सीमित सटीकता (of limited precision) के होते हैं और आपको फ़्लोट्स पर अंतिम अंकों तक भरोसा नहीं करना चाहिए।

    कोई भी कंप्यूटर कितना भी शक्तिशाली क्यों न हो, उसके CPU और RAM में गणितीय अंशों (fractions) की गणना करने की सीमित शक्ति होती है, और जब आप उनकी तुलना करना चाहते हैं, या कोई अन्य ऑपरेशन करना चाहते हैं तो त्रुटि (ERROR) हो सकता है। एक फ्लोट का आकार प्लेटफ़ॉर्म-निर्भर है, हालांकि अधिकतम 1.8e308 लगभग 14 दशमलव अंकों की सटीकता के साथ एक सामान्य मान (64 बिट IEEE प्रारूप) है।

<?php
  echo PHP_FLOAT_MAX; // 1.7976931348623E+308
  echo '<br />';
  echo PHP_FLOAT_MIN; // 2.2250738585072E-308 (ऋणात्मक संख्या नहीं है not a negative number)
  echo '<br />';
  echo PHP_FLOAT_SIZE; // त्रुटि, ऐसा कोई पूर्व-निर्धारित स्थिरांक constant मौजूद नहीं है
?>

1.7976931348623E+308
2.2250738585072E-308

Fatal error: Uncaught Error: Undefined constant "PHP_FLOAT_SIZE" in C:\xampp\htdocs\php_project\phptest.php:14 Stack trace: #0 {main} thrown in C:\xampp\htdocs\php_project\phptest.php on line 14

    फ़्लोटिंग पॉइंट नंबरों को निम्नलिखित तरीकों से प्रदर्शित किया जा सकता है। e या E10 की घातीय (exponential) शक्ति है (अर्थात, 7e1 70 के बराबर है, 7e2 700 के बराबर है, 7e-1 0.7 के बराबर है, और 7e-2 0.07 के बराबर है ...)। आपको याद रखना चाहिए कि e या E के बाद नकारात्मक संख्या (पूर्णांक या फ्लोट) मान को ऋणात्मक (negative) नहीं बनाता है, लेकिन यह इससे पहले की संख्या (पूर्णांक या फ्लोट) को घातीय (exponentially) रूप से उप-विभाजित (sub-divide) करता है। किसी संख्या का वर्गमूल (square-root) और घनमूल (cube-root) घातांकीय (exponentially) रूप से ½ (एक-आधा) और (एक-तिहाई) से उप-विभाजित करके प्राप्त किया जा सकता है।

<?php
  echo 12.3456789; // outputs 12.3456789
  echo '<br />';   echo 12.3e3; // outputs 12300
  echo '<br />';   echo 12.3e-3; // 0.0123
  echo '<br />';   echo 123_456.789; // 123456.789 // as of PHP 7.4.0
  echo '<br />';   var_dump( 7E-10 ); // float(7.0E-10)
?>

तर्कहीन/अपरिमेय (Irrational) संख्या

    अपरिमेय संख्याएँ वे संख्याएँ होती हैं जिन्हें अंकों में पूर्ण रूप से प्रदर्शित नहीं किया जा सकता है। PI का उदाहरण आपने फिल्म 'लाइफ ऑफ पाई' में देखा होगा जब छोटे लड़के (hero) ने इसके मान को अंतिम अंक तक लिखने की कोशिश की थी! अपरिमेय संख्याओं के अन्य उदाहरण हैं 2, 3, 5, आदि का वर्गमूल (अर्थात अभाज्य prime संख्याओं numbers का वर्गमूल)। यह समझाने के लिए कि प्रोग्रामिंग भाषाओं में अपरिमेय संख्याएँ कैसे लिखी जाती हैं, आपको पहले इन (गणितीय) संक्रियाओं में प्रयुक्त होने वाले संकारकों (operators) के बारे में जानना चाहिए।

ऑपरेटर्स

अंकगणितीय ऑपरेटर

    विभिन्न प्रकार के ऑपरेटर हैं, उदाहरण के लिए, अंकगणितीय ऑपरेटर, असाइनमेंट ऑपरेटर, तार्किक ऑपरेटर, तुलना ऑपरेटर, बिटवाइज़ ऑपरेटर, आदि। स्कूल में पढ़ाए जाने वाले सामान्य गणितीय ऑपरेटरों के विपरीत, PHP (और अन्य प्रोग्रामिंग भाषाएँ, जैसे कि पायथन, जावास्क्रिप्ट , C, C++, Java) में + (जोड़) , - (घटाव) , * (गुणा) , / (विभाजन) , % (मापांक modulus या शेष) , ** (घातीय exponential) आदि अंकगणितीय ऑपरेटर हैं।

असाइनमेंट ऑपरेटर्स

    असाइनमेंट ऑपरेटरों का उपयोग किसी चर (variable) या स्थिरांक ( const कीवर्ड का उपयोग करके) को मान निर्दिष्ट करने के लिए किया जाता है। ये हैं = (सरल असाइनमेंट) , += (जोड़ असाइनमेंट) , -= (घटाव असाइनमेंट) , *= (गुणा असाइनमेंट) , /= (डिवीजन असाइनमेंट) , %= (मॉड्यूलो असाइनमेंट) , **= (एक्सपोनेंशियल असाइनमेंट) , आदि। = को बराबर के (equal to) ऑपरेटर के रूप में भ्रमित न हों, जिसे नीचे समझाया गया है।

तुलना ऑपरेटरों

    संख्या, स्ट्रिंग, सरणी (array), बूलियन मान आदि की तुलना किसी अन्य संख्या, स्ट्रिंग, सरणी, आदि से की जा सकती है (यह आवश्यक नहीं है कि समान डेटा-प्रकार की तुलना की जाए!) तुलना हमेशा एक बूलियन मान लौटाती है, अर्थात 'सही' (true) या 'गलत' (false)। ये हैं == और != ('बराबर' equal to और 'नहीं के बराबर' not equal to - ढीली तुलना, केवल मूल्यों की तुलना की जाँच करता है) , === और !== ('समान' identical to और 'समान नहीं' not identical to - सख्त तुलना, मूल्यों की तुलना की जाँच करता है और डेटा-टाइप भी)

    अन्य तुलना ऑपरेटर हैं < (इससे कम) , > (इससे बड़ा) , <= (इससे कम या इसके बराबर) , >= (इससे बड़ा या इसके बराबर) , <> (इससे कम या इससे अधिक, यानी बराबर नहीं) , <=> (इसे स्पेसशिप ऑपरेटर कहा जाता है, यह रिटर्न देता है इससे कम होने पर -1, जब के बराबर 0, और जब से अधिक 1)। PHP 8.0.0 से पहले, जब एक स्ट्रिंग (उद्धरण चिह्नों में संलग्न संख्या नहीं) की तुलना किसी अन्य संख्या या संख्यात्मक स्ट्रिंग से की जाती है, तो तुलना संख्यात्मक रूप से की जाती है। इससे आश्चर्यजनक परिणाम सामने आ सकते हैं। आप अगले पृष्ठों में इन ऑपरेटरों के बारे में अधिक जानेंगे, जब हम PHP के उन्नत अनुभागों में जायेगें।

अपरिमेय संख्या विस्तार से

    निम्नलिखित अपरिमेय संख्याएँ पूर्णांकों को घातांक **(1/2) द्वारा अर्ध-विभाजित करके प्राप्त की जा सकती हैं। आप 2, 3, आदि का घनमूल भी उसी विधि से प्राप्त करने का प्रयास कर सकते हैं, उदाहरण के लिए, 2**(1/3), 3**(1/3), इत्यादि। ये अपरिमेय संख्याएँ सटीक नहीं हैं और कुछ हद तक सीमित हैं। जब आप निम्न उदाहरण से मूल्य प्राप्त करने के लिए echo फ़ंक्शन का उपयोग करते हैं, तो वे var_dump() परिणाम से कम सटीक होंगे।

<?php
  var_dump( 22/7 ); // value of PI
  echo '<br />';   var_dump( 2**0.5 ); // square root of 2
  echo '<br />';   var_dump( 3**0.5 ); // square root of 3
?>

float(3.142857142857143)
float(1.4142135623730951)
float(1.7320508075688772)

फ़्लोटिंग पॉइंट नंबरों पर कभी भरोसा न करें

    आपने उपरोक्त उदाहरणों में देखा है कि फ्लोट सीमित परिशुद्धता के होते हैं। इसलिए, आपको फ्लोटिंग पॉइंट नंबरों की तुलना कभी नहीं करनी चाहिए, और परिमेय (rational) संख्याओं पर भी गणितीय संक्रियाओं पर विश्वास नहीं करना चाहिए। 0.5, 2.3435642564 या कोई फ़्लोटिंग पॉइंट संख्या, जो PHP (या अन्य प्रोग्रामिंग भाषाओं) से एक आउटपुट है, परिमेय संख्याएँ हैं, क्योंकि उन्हें दशमलव बिंदु (डॉट) के बाद पूरी तरह से दर्शाया गया है।

<?php
  echo (int) ( (0.1+0.7) * 10 ); // outputs 7
  echo '<br />';   var_dump( (0.1+0.7) * 10 ); // float(7.999999999999999)
?>

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


Leave a Comment: