एक्सेलका अनौठा पक्षहरू | संचित भिन्न स्थानहरूका कारण गणनाको परिणाम किन फरक पर्छ, र IEEE 754 मा एक नजर

नमस्ते सबैलाई।

यो एन्टा हो।

के तपाईंले कहिल्यै एक्सेलमा मात्राको कुल योगफल निकाल्दा पत्ता लगाउनुभयो कि 'सबै जोड्दा तपाईंको म्यानुअल गणनासँग तुलना गर्दा १ येनको भिन्नता छ'?

ढलानको कामको लागत गणना गर्दा पनि, यदि तपाईं 'क्षेत्रफल × प्रति एकाइ मूल्य × भ्याट' जस्ता सूत्रहरू प्रयोग गरिरहनुहुन्छ भने,अन्तिम पङ्क्तिमा सधैं १ येन वा १ वर्ग मिटरको फरक हुन्छ।यो एक घटना हो।

यो एक्सेलको बग होइन, तर…IEEE 754: फ्लोटिङ-पोइन्ट संख्याहरूको लागि विश्वव्यापी मानकत्यसैले, हाहा

म केही समयअघि यसबारे साँच्चै रिसाएको थिएँ र यसबारे खोजी गरेँ, त्यसैले सोचेँ तपाईंहरू सबैसँग साझा गरूँ हाहा

त्यसो भए पनि, आजकल मानिसहरूले हिसाबकिताबका लागि प्रायः एक्सेल प्रयोग गर्दैनन् र?

म अझै पनि एक्सेलको प्रशंसक हुँ!

यो त लगभग जे पनि गर्न सक्छ, त्यसैले… हाहा


तर त्यो मुख्य कुरा होइन।

यस पटकएक्सेल (र अन्य धेरै सफ्टवेयर प्रोग्रामहरू) मा हुने राउन्डिङ त्रुटिहरूको वास्तविक प्रकृति,IEEE 754 दोहोरो-सटीक फ्लोटिङ-पोइन्ट विनिर्देशनत्यसैले,

ROUND फङ्क्शन प्रयोग गरी सही वैकल्पिक समाधानम परिमाण गणनासँग जुध्दा भोगेको मेरो अनुभव बताउनेछु।

माइक्रोसफ्टको आधिकारिक दस्तावेजमा यो स्पष्ट रूपमा उल्लेख गरिएकोले स्रोत 100% हो—यसमा कुनै शंका छैन।

गोल गर्ने त्रुटिका कारण उत्पन्न १ येनको भिन्नताको एक क्लासिक उदाहरण

एक्सेलका अनौठापनहरू पछाडिको सत्य | IEEE 754 मानक

सरल शब्दमा भन्नुपर्दा,Excel मा हुने गणना त्रुटिहरू बगहरू होइनन्, तर फ्लोटिङ-पोइन्ट अंकगणितका लागि IEEE 754 मानकको कडाइका साथ पालना गर्दा आउने परिणाम हुन्।बस यत्ति।

यो अलि 'हँ?' जस्तो क्षण हो, होइन र?

 

माइक्रोसफ्टले एक्सेलको गणना शुद्धताको सम्बन्धमा निम्न कुरा बताएको छ: माइक्रोसफ्ट एक्सेल IEEE 754 स्पेसिफिकेसनअनुसार डिजाइन गरिएको छ, जसले फ्लोटिङ-पोइन्ट संख्याहरू कसरी भण्डारण र गणना गरिन्छन् भन्ने निर्धारण गर्दछ। Excel ले 1.79769313486232E308 देखि 2.2250738585072E-308 सम्मका अंकहरू भण्डारण गर्न सक्छ, तरमहत्त्वपूर्ण अंकहरूको संख्या १५ भन्दा बढी हुनु हुँदैन।मा सीमित छ।

माइक्रोसफ्ट लर्नको आधिकारिक दस्तावेज: 'फ्लोटिङ-पोइन्ट अंकगणितको प्रयोगले एक्सेलमा गलत परिणामहरू निम्त्याउन सक्छ'

अर्को शब्दमा, एक्सेलले आन्तरिक रूपमा…सबै मानहरू बाइनरीमा सम्हालिन्छन्।त्यसकारण, दशमलवमा लेखिएको संख्यालाई बाइनरीमा रूपान्तरण गर्दा,गोलोकरण त्रुटि...जन्मियो।

यस घटनाको सार यो हो कि गणनाहरू दोहोर्याउँदा यी प्रभावहरू जम्मा हुन्छन्।

दशमलवबाट बाइनरीमा रूपान्तरण गर्दा त्रुटि किन आउँछ?

'0.1' जस्ता सीमित दशमलव संख्याहरू,बाइनरीमा, यसले अनन्तसम्म दोहोरिने दशमलव निम्त्याउँछ।यही कारण हो।

दशमलव द्विआधारी निरूपण टिप्पणीहरू
0.5 0.1 पूर्ण रूपमा व्यक्त गर्न सक्छ
0.25 0.01 पूर्ण रूपमा व्यक्त गर्न सक्छ
0.1 ०.०००११००११००११… (दोहोरिने) अनन्त लूप, राउन्डिङ त्रुटि भयो
0.2 ०.००११००११००११०… (दोहोरिने) उही
0.3 ०.०१००११००११००१… (दोहोरिने) उही

IEEE 754 डबल प्रिसिजन (६४-बिट) मा, यो अनन्त लूपनिश्चित संख्याका अङ्कहरूमा छोट्याएपछि भण्डार गर्नुहोस्फलस्वरूप, एक सानो त्रुटि (लगभग ±2.8 × 10⁻¹⁷) उत्पन्न हुन्छ (Microsoft Learn)।

दशमलव संख्या 0.1 लाई बाइनरीमा रूपान्तरण गर्दा अनन्त लूप कसरी उत्पन्न हुन्छ

विशिष्ट उदाहरणहरू | एक्सेलमा सामान्य भिन्नताहरू

पूर्वापेक्षित ज्ञान | साँचो र गलतको अर्थ

केही विशिष्ट उदाहरणहरू हेर्नु अघि, Excel मा… साँचो / गलत आउनुहोस् यसलाई हेरौं।

दिन ढल्किसकेको हुन सक्छ, तर यो सबैका लागि एकदमै आधारभूत कुरा हो, त्यसैले तपाईंले यसलाई साँच्चै सम्झनुहोस्।

एक्सेलमा '=', '>' र '<' यदि तपाईंले यसलाई प्रयोग गर्नुभयो भने, परिणाम हुनेछ साँचो (साँचो, बराबर, मान्य)गलत (गलत; बराबर छैन; लागू हुँदैन) ...र यो फर्केर आउँछ।

गणितीय सूत्र अर्थ परिणामहरू
बराबर १ १ के १ बराबर १ हो? साँचो
=१=२ के १ र २ एउटै हुन्? गलत
=5 > 3 के ५ ३ भन्दा ठूलो छ? साँचो

अर्को शब्दमा ए१=०.३ "Returns FALSE" = "A1 को मान 0.3 बराबर छैन" यसको अर्थ यही हो। कृपया तलको उदाहरण हेर्दा यसलाई ध्यानमा राख्नुहोस्।

स्पष्टताको लागि, समीकरणहरू पूर्ण-चौडाइ बराबर चिह्न (=) प्रयोग गरेर लेखिएका छन्। तिनीहरूलाई एक्सेलमा प्रविष्ट गर्दा, कृपया यीलाई आधा-चौडाइ '=' चिह्नहरूले प्रतिस्थापन गर्नुहोस्।

उदाहरण १ | ०.१ + ०.२ ≠ ०.३ को रहस्य

कृपया तल दिइएको कुरा एक्सेलको सेलमा प्रविष्ट गर्न प्रयास गर्नुहोस्।

कोशिका गणितीय सूत्र परिणामहरू प्रदर्शन गर्नुहोस् आन्तरिक मूल्य
ए वन = ०.१ + ०.२ 0.3 ०.३०००००००००००००००४…
ए टु ए१=०.३ गलत (कठोर रूपमा भन्नुपर्दा, तिनीहरू बराबर छैनन्)

यद्यपि डिस्प्लेले '0.3' को सही मान देखाउँछ,ए१=०.३ तुलना गर्दा, गलत हुन्छ. त्यो त IEEE 754 का अनौठापनहरूमध्ये एउटा मात्र हो, हाहा।

यो साँच्चै दुःखको कुरा हो, हैन र? हाहा

उदाहरण २ | १०० जोड्दा परिणाम पूर्णाङ्कबाट विचलित हुन्छ

=योग(A1:A100) जसरी देखाइएको छ, धेरै सेलहरूको योग गर्दा प्रत्येक सेलमा हुने सूक्ष्म त्रुटिहरू१०० टुक्रासम्म थुपार्न मिल्ने

  • 0.1 × 100 लाई एक-एक गरी जोड्दा → 9.99999999999998… जस्तो परिणाम
  • को अपेक्षित मान 10 सधैं ठ्याक्कै मेल नखान सक्छ

नागरिक इन्जिनियरिङ कार्यहरूको लागि परिमाणहरू संकलन गर्दा, 'क्षेत्रफल × एकाइ मूल्य' को १००-पङ्क्ति सारांश यदि तपाईंले त्यसो गर्नुभयो भने, अन्तिम पङ्क्तिमा केही देखि केही दर्जन येनको भिन्नता त्यसैले यस्तो हुन्छ।

[एक्सेलको SUM गणनामा १०० सेलहरूमा अंशहरू जम्मा भएर पूर्ण संख्याबाट विचलन निम्त्याउने उदाहरण | मात्रा योग गर्दा हुने एक सामान्य त्रुटि]

उदाहरण ३ | ढलान क्षेत्रफल गणना गर्दा भिन्नात्मक मानहरूको संचय (ढलान निर्माण स्थलहरूमा सामान्य घटना)

ढलान कार्यका लागि क्षेत्रफल गणना गर्दा सामान्यतया देखा पर्ने विशिष्ट परिदृश्यहरू:

  • ढाँचा अभियन्ता:एक्सेलमा वर्गमूल प्रयोग गरी क्षेत्रफलहरू गणना गर्नुहोस् र तिनीहरूलाई जोड्नुहोस्।
  • अन्तिम SUM पङ्क्तिमा, म्यानुअल गणना र ०.१ देखि ०.५ वर्ग मिटरको भिन्नता

यो त्यस्तै अवस्था हो जहाँ तपाईं अन्ततः किन थाहा नपाई आधा दिन बर्बाद गर्नुहुन्छ।

मलाई याद छ, पहिले यो प्रयोग गरेर पटक–पटक हिसाब गर्थें! हाहा

वैकल्पिक उपाय | ROUND फलक प्रयोग गरेर प्रत्येक पटक गोल गर्नुहोस्

प्रदर्शन ढाँचामा 'दशमलव स्थानहरूको संख्या घटाउनुहोस्' मात्र चयन गर्नु पर्याप्त छैन।

एक्सेलको 'Format Cells' फङ्क्सन प्रयोग गरेर दशमलव स्थानहरूको संख्या घटाउन,

मूल्यहरू प्रदर्शनका लागि मात्र गोल गरिएको हो; आधारभूत मूल्यहरूमा अझै त्रुटिहरू छन्।

यदि यसलाई अर्को गणनामा सार्ने हो भने त्रुटि कायम रहनेछ, त्यसैले यसले मौलिक समाधान प्रदान गर्दैन।

वास्तविक समाधान भनेको फङ्क्सनभित्रै मानलाई गोलो पार्नु हो।अर्थात्।

ROUND फंक्शन कहिले प्रयोग गर्ने

कार्य कार्यवाही उद्देश्य
=ROUND(मान, अङ्कहरूको संख्या) गोल पार्ने सामान्य उद्देश्य र लागत गणना
=राउन्डडाउन(मूल्य, अंकहरूको संख्या) छोट्याइँ एक सतर्क दृष्टिकोणमा आधारित लागत अनुमान
=राउन्डअप(मूल्य, अंकहरूको संख्या) समापन अभाव हुन नदिन अर्डर गर्नुपर्ने सामग्रीको मात्रा
=INT(मूल्य) पूर्णाङ्कीकरण (ऋणात्मक संख्याहरू फ्लोर फलन हुन्) यदि तपाईं मानलाई पूर्णाङ्कमा सीमित गर्न चाहनुहुन्छ भने
मूल्य, एकाइ निर्दिष्ट एकाइमा तल राख्नुहोस् नजिकको १० येन वा १०० येनमा गोल गर्ने
=CEILING(मान, एकाइ) निर्दिष्ट एकाइमा राउन्ड अप गर्नुहोस् माथि उल्लेखित अनुसार, अभाव हुन नदिन

ROUND फंक्शन प्रयोग गरेर भिन्नहरूलाई गोल गर्ने सही तरिका | रकम गणना गर्ने चरणहरू

लागत अनुमान र प्रारम्भिक गणनाहरू तयार गर्दा सधैं यसरी नै गर्नुहोस्!

निर्माण परियोजनाहरूको लागत अनुमान र प्रारम्भिक गणनाका लागि म अनुसरण गर्ने प्रक्रिया निम्नानुसार छ:

  • राशिहरूको गणना सधैं मात्रा * एकाइ मूल्य * १.१०, ० र प्रत्येक पटक सबैभन्दा नजिकको येनमा
  • परिमाण (क्षेत्रफल र आयतन) गणना गर्नु हो =राउन्ड(मूल्य, २) दुई दशमलव स्थानसम्म यसलाई बेर्नुहोस् र सुरक्षित गर्नुहोस्।
  • सारांशको अन्तिम पङ्क्तिमा पुनः गणना नगर्नुहोस्।(मार्गमा गोलो पारिएका मानहरूको सरल योग)

यसले तपाईंलाई अन्तिम येनसम्म मिल्ने गरी तपाईंको म्यानुअल गणनासँग ठ्याक्कै उस्तै खाता विवरण तयार गर्न अनुमति दिन्छ।

तपाईंले एकै समयमा 'Excel गणना शुद्धता विकल्पहरू' पनि प्रयोग गर्न सक्नुहुन्छ।

एक्सेलमा 'प्रदर्शित अङ्कहरूको सङ्ख्याको आधारमा गणना गर्नुहोस्' विकल्पयो विकल्प पनि उपलब्ध छ (File → Options → Advanced → When calculating this workbook)।

यदि तपाईं यसलाई ON मा स्विच गर्नुहुन्छ भने,कोशिकाको प्रदर्शन ढाँचाअनुसार आन्तरिक मानहरूलाई गोलो पारेर गणना गर्नुहोस्।उनीहरूले त्यसो गर्नेछन्। तथापि,

  • सम्पूर्ण पुस्तकमा लागू हुन्छ (चयन गरेर लागू गर्न सकिँदैन)
  • विद्यमान गणना परिणामहरू रातारात परिवर्तन हुन सक्ने सम्भावना छ।
  • टोलीभित्र साझा गरिएका लागत अनुमानहरूमा यसलाई प्रयोग नगर्नु नै उत्तम हुन्छ।

साँचो भन्नुपर्दा, व्यवहारमा हामी यो विकल्प वास्तवमा प्रयोग गर्दैनौं, रROUND फङ्क्सन प्रयोग गरेर तिनीहरूलाई व्यक्तिगत रूपमा नियन्त्रण गर्नु सुरक्षित हुन्छ।म यो जो कोहीलाई सिफारिस गर्छु जसले…

एक्सेल बाहिर पनि यही लागू हुन्छ | IEEE 754 अनुपालनका सीमाहरू

IEEE 754 मा फ्लोटिङ-पोइन्ट त्रुटि,यो समस्या केवल Excel मा सीमित छैन; यो Google Spreadsheets, Numbers र OpenOffice जस्ता सबै प्रमुख स्प्रेडशीट कार्यक्रमहरूमा देखा पर्छ।म गर्नेछु।

थप रूपमा, C, Python, JavaScript र SQL जस्ता अधिकांश प्रोग्रामिङ भाषाहरूमा पनि यही कुरा लागू हुन्छ।

Excel बाहेक सबै स्प्रेडशीट र प्रोग्रामिङ भाषाहरूमा IEEE 754 एक साझा मानक हो | त्रुटि विनिर्देशहरू विश्वव्यापी रूपमा मानकीकृत छन्

अर्को शब्दमा,'एक्सेल भएकोले गलत' होइन, तर विश्वव्यापी रूपमा मानकीकृत विनिर्देश।नागरिक इन्जिनियरको रूपमा, तपाईंले यो बुझ्नुपर्छ र ROUND फङ्क्सन प्रयोग गर्नुपर्छ।

ध्यानमा राख्नुपर्ने पाँच मुख्य बुँदाहरू

क्षेत्रफल गणना, परिमाण गणना र यस्तै अन्य गणनाहरूका लागि एक्सेल प्रयोग गर्दा कृपया निम्न पाँच बुँदाहरू ध्यानमा राख्नुहोस्।

  • राशिहरूको गणना सधैं =राउन्ड(…,0) र नजिकको येनमा गोल
  • परिमाण गणनाहरू हुन् =राउन्ड(…,2) र दुई दशमलव स्थानमा सेट गर्नुहोस्
  • डिस्प्ले ढाँचामा राउन्डिङ गर्दा आधारभूत मान परिवर्तन हुँदैन।सचेत रहँदै
  • ए१=०.३ यस्ता प्रत्यक्ष तुलनाहरूबाट जोगिनुहोस्।('गलत' नतिजाको फन्दा)
  • टोलीले प्रयोग गर्ने लागत अनुमानहरूमा 'सटीकता विकल्प' प्रयोग नगर्नुहोस्।

यदि तपाईं अनिश्चित हुनुहुन्छ भने, पहिले विचार गर्नुहोस् कि `ROUND` फंक्शनको एकल उदाहरण समावेश गर्ने कि नगर्ने।

केवल एउटा ROUND अपरेशन राख्दा IEEE 754 का कारण उत्पन्न हुने ९९१ TP3T विचलन हट्छ।

यो कुरा होइन कि एक्सेलमा 'विचित्रताहरू' छन्, बरु—विश्वभर फ्लोटिङ-पोइन्ट अंकगणितका अनौठा पक्षहरूहामीले यसलाई बुझ्न र यसको पूर्ण उपयोग गर्न आवश्यक छ।

 

फेरि भेटौँला।

मानिसहरूले प्रायः कङ्क्रिट राख्दा स्थिति सहनशीलताको आवश्यकतामा प्रश्न उठाउँछन्, तर सधैं एउटै मात्र उत्तर हुन्छ!

टिप्पणी गर्नुहोस्

यो साइट स्प्याम घटाउन Akismet प्रयोग गर्दछ। तपाईंको टिप्पणी डेटा कसरी प्रशोधन गरिन्छ जान्नुहोस्।