2011-01-20 9 views
9

मैं लंबे सिमुलेशन चला रहा हूं। डेटा के आंकड़ों की गणना करने के लिए मैं परिणामों को वेक्टर में रिकॉर्ड करता हूं। मुझे एहसास हुआ कि, सिद्धांत रूप में, उन नमूने शून्य से एक विभाजन का परिणाम हो सकता है; यह केवल सैद्धांतिक है, मुझे पूरा यकीन है कि यह मामला नहीं है। कोड को संशोधित करने के बाद सिमुलेशन को दोबारा शुरू करने से बचने के लिए, मैं सोच रहा था कि उस मामले में क्या होता है। क्या मैं यह महसूस कर पाऊंगा कि 0 से एक विभाजन हुआ है या नहीं? क्या मुझे त्रुटि संदेश मिलेंगे? (इस समय अपवादों को संभाला नहीं जा रहा है)।सी ++ विभाजन 0

धन्यवाद

+4

हम किस प्रकार से बात कर रहे हैं? नाव? – EboMike

उत्तर

2

निर्भर करता है अगर आप पूर्णांकों का उपयोग कर रहे या अस्थायी अंक संख्या। पूर्णांक के लिए, आपको रनटाइम अपवाद मिलेगा। फ़्लोटिंग पॉइंट नंबरों के लिए, परिणाम +/- अनंतता, या NaN (0.0/0.0) के लिए होगा, जिसे आप std::isnan() का उपयोग करके परीक्षण कर सकते हैं।

+5

पूर्णांक के लिए रनटाइम अपवाद आवश्यक नहीं है। – etarion

24

आईईईई फ्लोट्स के लिए, 0 द्वारा एक सीमित गैरजेरो फ्लोट का विभाजन अच्छी तरह से परिभाषित किया गया है और परिणाम + अनंतता (यदि मान> शून्य था) या -फिनिटी (यदि मान शून्य से कम था) में परिणाम। 0.0/0.0 का परिणाम NaN है। यदि आप पूर्णांक का उपयोग करते हैं, तो व्यवहार अपरिभाषित है।

+0

बस स्पष्ट होने के लिए, यदि एक फ्लोट 0.0 को पूर्णांक 0 से विभाजित किया गया है, तो पूर्णांक को फ्लोट के रूप में डाला जाएगा और परिणाम NaN है, सही? –

3

यदि आप पूर्णांक की बात कर रहे हैं तो आपका प्रोग्राम शून्य पर विभाजन पर क्रैश होना चाहिए।

यदि आप फ्लोट्स की बात कर रहे हैं तो शून्य से विभाजन की अनुमति है और इसका परिणाम INF या -INF है। यदि प्रोग्राम क्रैश हो जाएगा, तो यह आपके कोड पर निर्भर है, उस अच्छी तरह से संभाल लें या अपरिभाषित/अप्रत्याशित परिणामों के साथ जारी रखें।

8

ध्यान दें कि सी मानक कहते हैं (6.5.5):

/ऑपरेटर का परिणाम दूसरे से पहले संकार्य के विभाजन से भागफल है; % ऑपरेटर का परिणाम शेष है। दोनों परिचालनों में, यदि दूसरे ऑपरेंड का मान शून्य है, तो व्यवहार अपरिभाषित है।

तो कुछ/0 दोनों अभिन्न प्रकारों और फ़्लोटिंग बिंदुओं के लिए अनिश्चित (मानक द्वारा) दोनों हैं। फिर भी अधिकांश कार्यान्वयनों में उल्लेखनीय व्यवहार (+ -INF या NAN) है।

+1

यह ध्यान देने योग्य है कि कम से कम सी में, यदि एक कार्यान्वयन [सी मानक अनुलग्नक एफ] (https://www.python.org/dev/peps/pep-0366/) (वैकल्पिक) के लिए समर्थन घोषित करता है, तो अनुबंध एफ ओवरराइड 6.5 .5 फ्लोटिंग-पॉइंट प्रकारों के लिए और शून्य परिभाषित द्वारा फ़्लोटिंग-पॉइंट डिवीजन प्रस्तुत करता है। मुझे नहीं लगता कि मानक स्पष्ट रूप से यह कहता है, लेकिन एनेक्स एफ के कई हिस्सों हैं जो शून्य के विभाजन के बारे में चीजों को निर्दिष्ट करते हैं या व्यवहार नहीं करना चाहिए। – user2357112

0

यदि आप आईईईई फ्लोट का उपयोग करते हैं, तो यह 0 या NaN वापस आ जाएगा। यदि op1 0 है, तो आप अपरिभाषित होंगे। यदि op1 0 से अधिक है, तो आपको अनंतता मिल जाएगी। यदि op1 0 से कम है, तो आपको -इफिनिटी मिलेगी। यदि आप 0 से सीधे या पूर्णांक में विभाजित करते हैं, तो आपको "फ़्लोटिंग पॉइंट अपवाद" त्रुटि मिल जाएगी।

संबंधित मुद्दे