2011-12-23 17 views
6

मैं सी ++ 11 के लिए धारा 5.6 में कुछ शब्द परिवर्तनों को देख रहा था। (मैं 2011-02-28 दिनांकित सी ++ मानक एन 3242 के मसौदे को देख रहा हूं।) नया (मसौदा) मानक वाक्य में शामिल है:सी ++ में इंटीजर डिवीजन 11

"अभिन्न ऑपरेशंस के लिए ऑपरेटर बीजगणितीय भाग को किसी भी आंशिक भाग के साथ छोड़ देता है , "

यह कथन 03 मानक (आईएसओ-आईईसी -14882-2003) के 5.6 में नहीं है, लेकिन मुझे नहीं लगता कि यह एक बदलाव है, है ना? इस प्रकार सी और सी ++ ने वर्षों तक काम किया है जब तक कि मैंने अपना दिमाग खो दिया हो (जो वैसे भी हो सकता है)।

उत्तर

9

आप पागल नहीं जा रहे हैं।

5.6/4 को एक फुटनोट ने कहा:

[C++03 footnote 74]: संशोधन आईएसओ सी के की ओर चल काम के अनुसार, पूर्णांक विभाजन के लिए पसंदीदा एल्गोरिथ्म नियम आईएसओ फोरट्रान मानक, आईएसओ/आईईसी 1539 में परिभाषित इस प्रकार है : 1 99 1, जिसमें उद्धरण हमेशा शून्य की तरफ गोल होता है।

सी ++ में यह व्यवहार स्पष्ट रूप से "पसंदीदा" होने के बजाय आवश्यक है; परिवर्तन संगतता अनुभाग में सूचीबद्ध है:

[C++11: C.2.2]:
बदलें: बढ़ाएँ पोर्टेबिलिटी, C99 अनुकूलता: पूर्णांक / और %
दलील के परिणामों के लिए गोलाई निर्दिष्ट करें। मूल विशेषता पर
प्रभाव: मान्य सी ++ 2003 कोड पूर्णांक विभाजन राउंड परिणाम का उपयोग करता है 0 की ओर या नकारात्मक अनंत की ओर, इस अंतर्राष्ट्रीय मानक जबकि हमेशा की ओर 0.

1

लगभग परिणाम दौर। सी ++ 03 में % (जिसमें दोनों शब्दों को निर्दिष्ट किया गया था) के लिए शेष का संकेत अनिर्दिष्ट था, क्योंकि इस तरह की गोलियां कुछ स्थितियों में भी शून्य से दूर हो सकती हैं। सी ++ 03 फुटनोट के साथ तुलना करें: 1991:

आईएसओ सी में संशोधन की ओर चल काम के अनुसार, पूर्णांक विभाजन के लिए पसंदीदा एल्गोरिथ्म नियम 1539 आईएसओ फोरट्रान मानक, आईएसओ/आईईसी में परिभाषित किया गया इस प्रकार है , जिसमें उद्धरण हमेशा शून्य की तरफ गोल होता है।

हालांकि अभ्यास में, इसने लगभग कोई फर्क नहीं पड़ता।

+0

इससे मेरे कोड में एक बड़ा अंतर आएगा। क्या इसका मतलब यह है कि '%' के परिणाम का संकेत अब भी परिभाषित किया गया है? – ThomasMcLeod

+1

@ थॉमस एमसीएलओड: हां, पूरी '/'/'%' चीज अब हर जगह व्यवहार करने के लिए परिभाषित की गई है। क्या आप वाकई अपने कोड में एक फर्क पड़ता है? क्या आपका कार्यान्वयन उन कुछ लोगों में से एक है जो पहले से ही छोटा नहीं हुआ है? – PlasmaHH

+1

मॉड्यूलस ऑपरेटर की व्याख्या करने के कम से कम दो तरीके हैं। अधिक आम तरीका बस विभाजन का शेष है। इस मामले में, परिणाम का संकेत उद्धरण के संकेत के समान है। उदा।, -5% -4 == 1 और& -5% 4 == -1'। एक और तरीका बीजगणितीय तरीका है, जहां मॉड ऑपरेटर ऑपरेंड की एकरूपता कक्षा देता है।इस मामले में, '% m == b' अगर और केवल तभी' m' विभाजित करता है '(बी - ए)' और परिभाषित किया जाता है कि 'm' ​​सकारात्मक है। यहाँ। 'बी' एक गैर-ऋणात्मक रूप से 'एम' से कम है, और इसलिए' -5% 4 == 3' है। – ThomasMcLeod