फ्लोटिंग-पॉइंट अंकगणित, एक जटिल विषय जिसे अक्सर गलत समझा जाता है, आधुनिक कंप्यूटर सिस्टम में व्याप्त है। चूंकि अधिकांश भिन्नात्मक संख्याओं में सटीक बाइनरी प्रतिनिधित्व का अभाव होता है, इसलिए पूर्णांकन अपरिहार्य रूप से होता है। फ़्लोटिंग-पॉइंट ऑपरेशंस की बारीकियों को समझना महत्वपूर्ण है, जैसा कि "फ़्लोटिंग-पॉइंट अंकगणित के बारे में प्रत्येक कंप्यूटर वैज्ञानिक को क्या पता होना चाहिए" में बताया गया है।
उत्तर: नहीं, आप php.ini सटीक सेटिंग्स पर भरोसा नहीं कर सकते लगातार 2-अंकीय सटीकता के लिए, यहां तक कि 10^6 से नीचे की संख्याओं के लिए भी, क्योंकि गणना के दौरान सटीक लंबाई बढ़ सकती है।
उत्तर: केवल पहले किलोग्राम पर लागू 10% छूट के साथ निम्नलिखित उदाहरण पर विचार करें:
ini_set('precision', 8); // Your precision $a = 5.88; // Cost of 1kg $q = 2.49; // User buys 2.49 kg $b = $a * 0.01; // 10% Discount only on the first kg echo ($a * $q) - $b;
आउटपुट: 14.5824
उत्तर: PHP परिशुद्धता सेटिंग्स वित्तीय गणना या फ़्लोटिंग-पॉइंट परिशुद्धता के लिए विश्वसनीय आधार नहीं हैं। विशेष पुस्तकालयों या विधियों का उपयोग करना बेहतर है। ; $बी = 341765.07; // उदाहरण ए: परिशुद्धता = 20 प्रतिध्वनि $a - $b, PHP_EOL; //584.15999999997438863 इको फ्लोटवल(राउंड($a - $b, 2)), PHP_EOL; //584.15999999999996817 (गोलीकरण अस्थिरता का परिचय देता है) इको नंबर_फॉर्मेट ($ ए - $ बी, 2), PHP_EOL; // 584.16 इको bcsub($a, $b, 2), PHP_EOL; //584.15 // उदाहरण बी: परिशुद्धता = 14 प्रतिध्वनि $a - $b, PHP_EOL; //584.15999999997 इको फ्लोटवल(राउंड($a - $b, 2)), PHP_EOL; // 584.16 इको नंबर_फॉर्मेट ($ ए - $ बी, 2), PHP_EOL; // 584.16 इको bcsub($a, $b, 2), PHP_EOL; // 584.16 // उदाहरण सी: परिशुद्धता = 6 प्रतिध्वनि $a - $b, PHP_EOL; // 584.16 इको फ्लोटवल(राउंड($a - $b, 2)), PHP_EOL; // 584.16 इको नंबर_फॉर्मेट ($ ए - $ बी, 2), PHP_EOL; // 584.16 इको bcsub($a, $b, 2), PHP_EOL; // 584.00 // उदाहरण डी: परिशुद्धता = 3 प्रतिध्वनि $a - $b, PHP_EOL; //584 इको फ्लोटवल(राउंड($a - $b, 2)), PHP_EOL; //584 इको नंबर_फॉर्मेट ($ ए - $ बी, 2), PHP_EOL; //584.16 (सुसंगत) इको bcsub($a, $b, 2), PHP_EOL; // 0.00
ये उदाहरण सटीक गणना के लिए PHP परिशुद्धता सेटिंग्स पर भरोसा करने में विसंगतियों को प्रदर्शित करते हैं।
$a = 342349.23; $b = 341765.07; // Example A: precision = 20 echo $a - $b, PHP_EOL; // 584.15999999997438863 echo floatval(round($a - $b, 2)), PHP_EOL; // 584.15999999999996817 (rounding introduces instability) echo number_format($a - $b, 2), PHP_EOL; // 584.16 echo bcsub($a, $b, 2), PHP_EOL; // 584.15 // Example B: precision = 14 echo $a - $b, PHP_EOL; // 584.15999999997 echo floatval(round($a - $b, 2)), PHP_EOL; // 584.16 echo number_format($a - $b, 2), PHP_EOL; // 584.16 echo bcsub($a, $b, 2), PHP_EOL; // 584.16 // Example C: precision = 6 echo $a - $b, PHP_EOL; // 584.16 echo floatval(round($a - $b, 2)), PHP_EOL; // 584.16 echo number_format($a - $b, 2), PHP_EOL; // 584.16 echo bcsub($a, $b, 2), PHP_EOL; // 584.00 // Example D: precision = 3 echo $a - $b, PHP_EOL; // 584 echo floatval(round($a - $b, 2)), PHP_EOL; // 584 echo number_format($a - $b, 2), PHP_EOL; // 584.16 (consistent) echo bcsub($a, $b, 2), PHP_EOL; // 0.00
ini_set('precision', 8); $ए = 0.19; $बी = 0.16; $सी = 0.01; $d = 0.01; $ई = 0.01; $f = 0.01; $जी = 0.01;
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3