Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में फ़्लोटिंग पॉइंट अपवादों को समझना:कारण और समाधान

<पी> फ़्लोटिंग-पॉइंट अपवाद यह तब होता है जब कोई सॉफ़्टवेयर किसी संख्यात्मक संख्या पर अनुचित ऑपरेशन करने का प्रयास करता है। इस प्रकार का अपवाद तब होता है जब कोई उपयोगकर्ता अमान्य संचालन निष्पादित करने का प्रयास करता है, जैसे शून्य से विभाजन, एक ऋणात्मक संख्या को एक सम संख्या से विभाजित करना, एक ऋणात्मक संख्या का वर्गमूल लेना, या किसी गणना का अतिप्रवाह जो दोहरे डेटा प्रकार की सीमा से अधिक है।

<पी> C++ में, “SIGFPE” सिग्नल हैंडलर फ़्लोटिंग पॉइंट अपवाद को संभालता है (एफपीई). जब कोई उपयोगकर्ता उल्लिखित कार्यों को पूरा करने का प्रयास करता है, तो इस सिग्नल हैंडलर को कॉल किया जाता है। एक बार जब सिग्नल हैंडलर हस्तक्षेप कर देता है, तो यह मानक आउटपुट पर एक त्रुटि संदेश प्रिंट करता है और प्रोग्राम को रोक देता है।

फ़्लोटिंग-पॉइंट अपवाद क्यों होते हैं?

<पी> फ़्लोटिंग पॉइंट अपवाद प्रोग्रामिंग त्रुटियों के कारण या जब कोई प्रोग्राम किसी ऐसे मान को संसाधित करने का प्रयास करता है जो विनिर्देश से बाहर है, तब हो सकता है। उदाहरण के लिए, यदि कोई प्रोग्राम किसी पूर्णांक को शून्य से विभाजित करने का प्रयास करता है, या यदि कोई प्रोग्राम ऋणात्मक संख्या का वर्गमूल लेने का प्रयास करता है, तो एक फ़्लोटिंग पॉइंट अपवाद घटित होगा. इसके अलावा, कुछ फ़्लोटिंग-पॉइंट अपवाद प्रोसेसर की गलत पहचान के कारण ऐसा हो सकता है।

<पी> अनुचित संचालन, अंडरफ्लो, ओवरफ्लो, शून्य से विभाजन और सटीकता जैसे कई कारकों के परिणामस्वरूपफ्लोटिंग-पॉइंट अपवादहो सकता है। . हम इस अनुभाग में इन तर्कों को एक-एक करके कवर करेंगे।

1:अवैध संचालन

<पी> जब कोई उपयोगकर्ता किसी ऑपरेशन को व्यक्त करना भूल जाता है या ऑपरेशन का कोई गणितीय मूल्य नहीं होता है, तो प्रोग्राम अमान्य ऑपरेशन के कारण निष्पादित करने में विफल रहता है। उदाहरण के लिए, इसमें ऋणात्मक संख्याओं का वर्गमूल और लघुगणक जैसी गणनाएँ शामिल हैं। यद्यपि जटिल संख्याओं से निपटते समय ऋणात्मक संख्या का वर्गमूल निकालना संभव है, लेकिन इसे व्यक्त करने के लिए कोई कंप्यूटर-आधारित तंत्र नहीं है।

<पी> इसके अतिरिक्त, यदि कोई सॉफ़्टवेयर फ़्लोटिंग-पॉइंट निष्पादित करता है तो एक गलत ऑपरेशन परिणामित होगा पूर्णांक-मात्र स्थान पर संचालन। यह उस ऑपरेशन के बीच बेमेल होने के कारण है जिसे आप डेटा (फ़्लोटिंग-पॉइंट ऑपरेशन) और संग्रहीत डेटा (पूर्णांक) पर करने का प्रयास कर रहे हैं।

2:शून्य विभाजन

<पी> एक फ़्लोटिंग-पॉइंट अपवाद यदि आप किसी पूर्णांक को शून्य से विभाजित करने का प्रयास करते हैं तो इसे फेंक दिया जाता है। यही बात तब होती है जब आप NaN या अनंत से विभाजित करने का प्रयास करते हैं। यहां कुछ उदाहरण दिए गए हैं:1/0, लॉग(0).

3:अतिप्रवाह

<पी> जब कोई ऑपरेशन ऐसा मान लौटाता है जो उसकी अपेक्षित सीमा से बाहर है, तो एक अतिप्रवाह अपवाद होता है। इस कथन के अनुसार, मान या तो सबसे छोटे प्रतिनिधित्व योग्य मान से अधिक या कम है।

4:अंडरफ्लो

<पी> अंडरफ़्लो तब होता है जब गणना से ऐसा परिणाम मिलता है जो डेटा प्रकार की क्षमता से कम होता है।

5:अयथार्थ

<पी> जब किसी ऑपरेशन का परिणाम प्रत्याशित से भिन्न होता है, तो इसे एक अचूक अपवाद के रूप में जाना जाता है। जब ऑपरेशन अनबाउंड परिशुद्धता और एक घातांक सीमा के साथ किया जाता है, तो ऐसा होता है।

<पी> कुछ मामलों में, ऐसी स्थितियों को शालीनता से संभाला जा सकता है। उदाहरण के लिए, जब कोई प्रोग्राम किसी संख्या को शून्य से विभाजित करने का प्रयास करता है, तो आमतौर पर एक त्रुटि संदेश लौटाना और प्रोग्राम को क्रैश होने देने के बजाय शालीनतापूर्वक समाप्त करना बेहतर होता है।

<पी> #शामिल

<पी> #शामिल

<पी> नेमस्पेस एसटीडी का उपयोग करना;

<पी> फ्लोट डिव (फ्लोट संख्या, फ्लोट डेन) <पी> { <पी>     यदि (den ==0) {

<पी>        रनटाइम_त्रुटि फेंकें ("गणित त्रुटि:0\n से विभाजित करने का प्रयास किया गया");

<पी>     }

<पी>     वापसी (संख्या / den);

<पी> }

<पी> int मुख्य()

<पी> { <पी>     फ्लोट संख्या, डेनोम, परिणाम;

<पी>     संख्या =10;

<पी>     डेनोम =0;

<पी>     प्रयास करें {

<पी>         परिणाम =Div(num, denom);

<पी>             cout <<"भागफल है " <<परिणाम <<एंडएल; <पी>     }

<पी>     पकड़ें (रनटाइम_त्रुटि और ई) { <पी>       cout <<"अपवाद हुआ" <<एंडल < <पी>     }

<पी> }

<पी> इस कोड में, Div फ़ंक्शन को मुख्य के अंदर ट्राई ब्लॉक द्वारा कॉल किया जाता है . यदिनाम है शून्यके बराबर नहीं है , दिडिव फ़ंक्शन भागफल लौटाता है; यदि यह है, तो एक रनटाइम त्रुटि अपवाद फेंक दिया जाता है. रनटाइम त्रुटि ऑब्जेक्ट ई के साथ किस फ़ंक्शन को कॉल करने से पहले, कैच ब्लॉक इस अपवाद को रोकता है और टेक्स्ट को प्रिंट करता है "त्रुटि उत्पन्न हुई" . इसका उपयोग अपवाद की पहचान करने के लिए किया जाता है। वर्ग मानक अपवाद, जिसका वर्णन stdexcept में किया गया है हेडर फ़ाइल में एक वर्चुअल फ़ंक्शन होता है जिसे what() कहा जाता है . संदेश "गणित त्रुटि:0 से विभाजित करने का प्रयास किया गया" परिणामस्वरूप मुद्रित होता है।

<पी> आउटपुट <पी> C++ में फ़्लोटिंग पॉइंट अपवादों को समझना:कारण और समाधान

<पी> फ़्लोटिंग पॉइंट अपवादों को रोकने के लिए C++ में, फ़ंक्शंस में दिए गए सभी मापदंडों की जांच करना, उचित प्रारूपों का उपयोग करना और शून्य मानों के लिए विभाजकों का स्पष्ट रूप से परीक्षण करना आवश्यक है। इसके अलावा, दोहरे डेटा प्रकारों का उपयोग करते समय, यदि प्रोग्राम को बड़े अंकगणितीय परिणामों की आवश्यकता होती है, तो डेटा प्रकार की सीमा को बढ़ाना महत्वपूर्ण है।

निष्कर्ष

<पी> फ़्लोटिंग पॉइंट अपवाद C++ में संख्यात्मक मानों पर अमान्य संचालन के कारण होते हैं और प्रोग्राम की सही ढंग से निष्पादित करने की क्षमता को प्रभावित कर सकते हैं। ऐसी त्रुटियों से बचने के लिए, फ़ंक्शन में दिए गए सभी मापदंडों की जांच करना और उचित डेटा प्रकारों का उपयोग करना महत्वपूर्ण है। इसके अलावा, फ़्लोटिंग पॉइंट अपवादों को पकड़ना फायदेमंद है .


  1. HTML5 शब्दार्थ HTML5 शब्दार्थ

    HTML5 शब्दार्थ शब्दार्थ टैग को संदर्भित करता है जो एक HTML पृष्ठ को अर्थ प्रदान करता है। HTML5 में टैग्स को दो कैटेगरी में बांटा गया है - सिमेंटिक और नॉन-सिमेंटिक। HTML5 HTML में कई नए सिमेंटिक टैग लाता है। कुछ HTML5 सिमेंटिक टैग हैं - टैग स्पष्टीकरण आंकड़ा यह विभिन्न स्वरूपों के साथ एक छवि निर्द

  1. NoSQL क्या है और क्या यह डेटाबेस में अगला बड़ा चलन है? NoSQL क्या है और क्या यह डेटाबेस में अगला बड़ा चलन है?

    NoSQL क्या है? आधिकारिक विकी परिभाषा के अनुसार:ए NoSQL (मूल रूप से नॉन एसक्यूएल या नॉन रिलेशनल का जिक्र करते हुए) डेटाबेस डेटा के भंडारण और पुनर्प्राप्ति के लिए एक तंत्र प्रदान करता है जो संबंध डेटाबेस (आरडीबीएमएस) में उपयोग किए जाने वाले सारणीबद्ध संबंधों के अलावा अन्य तरीकों से तैयार किया जाता है

  1. ए रूबीस्ट्स कैरेक्टर एन्कोडिंग, यूनिकोड और यूटीएफ -8 का परिचय ए रूबीस्ट्स कैरेक्टर एन्कोडिंग, यूनिकोड और यूटीएफ -8 का परिचय

    बहुत संभव है कि आपने रूबी अपवाद देखा हो जैसे UndefinedConversionError या IncompatibleCharacterEncodings . इसकी संभावना कम है कि आप अपवाद का अर्थ समझ गए हैं। यह लेख मदद करेगा। आप सीखेंगे कि चरित्र एन्कोडिंग कैसे काम करती है और रूबी में उन्हें कैसे लागू किया जाता है। अंत तक, आप इन त्रुटियों को अधिक आस