"मॉड" और "शेष" के बीच क्या अंतर है?


133

मेरे दोस्त ने कहा कि "मॉड" और "शेष" के बीच अंतर हैं।

यदि हां, तो C और C ++ में क्या अंतर हैं? क्या सी में "% 'का अर्थ" मॉड "या" रेम "है?


2
यह शायद नकारात्मक ऑपरेंड के लिए बीमार परिभाषित है।
बेसिल स्टारीनेवविच

1
मैं एक C व्यक्ति नहीं हूं :( इसलिए उत्तर बॉक्स के भीतर वास्तव में इसका जवाब नहीं दे सकता। लेकिन कृपया इस लेख पर एक नज़र डालें :)
bonCodigo

1
% शेष है। उत्तर का विवरण यहाँ -> blogs.msdn.com/b/ericlippert/archive/2011/12/05/…
wim

1
प्रश्न का अर्थ कुछ भी नहीं है जब तक कि आप ठीक से परिभाषित न करें कि शर्तों का क्या मतलब है।
डेविड हेफर्नन 12

14
@ डेविड: सवाल शब्दों के अर्थ के बारे में है। यदि आप कहते हैं कि प्रश्न का कोई अर्थ नहीं है, तो कई लोग इसे इस तरह से समझने के बावजूद कि प्रश्नकर्ता का इरादा है, तो मुझे लगता है कि आपको "मीन" शब्द से अधिक विशिष्ट होना चाहिए;;
स्टीव जेसप

जवाबों:


140

मापांक और शेष के बीच अंतर है। उदाहरण के लिए:

-21आधुनिक 4है 3क्योंकि -21 + 4 x 6है 3

लेकिन -21द्वारा विभाजित शेष के साथ 4देता -5है -1

सकारात्मक मूल्यों के लिए, कोई अंतर नहीं है।


22
% का मतलब है सी। में रेम
१३

22
@ जिंक्सियाओ: C89 में इसे लागू-परिभाषित किया %गया था : हमेशा शेष था, लेकिन यह मापांक (यानी हमेशा सकारात्मक) भी हो सकता है, क्योंकि C89 में पूर्णांक विभाजन को 0. के बजाय नकारात्मक अनंत की ओर गोल करने की अनुमति दी गई थी। इसलिए C89 में शेष के साथ -5 / 2हो सकता है , या शेष के साथ , कार्यान्वयन को केवल दस्तावेज करना था। C99 ने लचीलापन हटा दिया, इसलिए अब हमेशा है । -2-1-31-5 / 2-2
स्टीव जेसोप

2
वास्तव में, यह स्पष्ट नहीं है कि मापांक क्या है। संदर्भ और भाषा के आधार पर कई अलग-अलग परिभाषाएं हैं। Modulo_operation के बारे में विकिपीडिया लेख देखें। कुछ संदर्भों में, यह वास्तव में शेष के समान ही है।
रूडी वेल्थसुवन

9
क्या कोई पहली गणना में चरणों की व्याख्या कर सकता है? -21मॉड कैसे 4है 3? गणना क्यों है -21 + 4 x 6?
ओज एड्री

13
@OzEdri कुछ संख्या मॉड 4 प्राप्त करने के लिए, आप जो भी पूर्णांक गुणक 4 जोड़ते हैं, उसे 0 और 3. -21 के बीच एक संख्या प्राप्त करने के लिए लेता है, यह पूर्णांक 6 है क्योंकि -21 + 4 x 60 और 3 के बीच है
डेविड श्वार्ट्ज

47

क्या सी में "% 'का अर्थ" मॉड "या" रेम "है?

सी में, %है शेष 1

..., /ऑपरेटर का परिणाम बीजगणितीय भागफल है जिसमें किसी भी आंशिक भाग को छोड़ दिया गया है ... (इसे अक्सर "शून्य की ओर झुकाव" कहा जाता है।) C11dr §6.5.5 6

%ऑपरेटर के परिचालकों में पूर्णांक प्रकार होगा। C11dr 116.5.5 2

/ऑपरेटर का परिणाम दूसरे द्वारा पहले ऑपरेंड के विभाजन से भागफल है; %ऑपरेटर का परिणाम शेष है ... C11dr .56.5.5 5


"मॉड" और "शेष" के बीच क्या अंतर है?

सी "मॉड" को परिभाषित नहीं करता है, जैसे कि यूक्लिडियन डिवीजन या अन्य मोडुलो में उपयोग किए जाने वाले पूर्णांक मापांक फ़ंक्शन । "यूक्लिडियन मॉड" नकारात्मक होने पर सी के a%bऑपरेशन से भिन्न होता है a

 // a % b
 7 %  3 -->  1  
 7 % -3 -->  1  
-7 %  3 --> -1  
-7 % -3 --> -1   

मोडुलो यूक्लिडियन डिवीजन के रूप में

 7 modulo  3 -->  1  
 7 modulo -3 -->  1  
-7 modulo  3 -->  2  
-7 modulo -3 -->  2   

उम्मीदवार मोडुलो कोड:

int modulo_Euclidean(int a, int b) {
  int m = a % b;
  if (m < 0) {
    // m += (b < 0) ? -b : b; // avoid this form: it is UB when b == INT_MIN
    m = (b < 0) ? m - b : m + b;
  }
  return m;
}

फ़्लोटिंग पॉइंट के बारे में ध्यान दें: double fmod(double x, double y)भले ही "fmod" कहा जाता है, यह यूक्लिडियन डिवीजन "मॉड" के समान नहीं है, लेकिन सी पूर्णांक के समान है:

fmod कार्यों की गणना की फ्लोटिंग प्वाइंट शेष x/y। C11dr 117.12.10.1 2

fmod( 7,  3) -->  1.0  
fmod( 7, -3) -->  1.0  
fmod(-7,  3) --> -1.0  
fmod(-7, -3) --> -1.0   

विघटन : C में एक समान नाम वाला फ़ंक्शन भी है double modf(double value, double *iptr)जो तर्क मान को अभिन्न और भिन्नात्मक भागों में तोड़ता है, जिनमें से प्रत्येक का तर्क के समान प्रकार और संकेत है। यह नाम समानता को छोड़कर यहां "आधुनिक" चर्चा के साथ बहुत कम है।


1 C99 से पहले, C की परिभाषा %अभी भी विभाजन से शेष थी , फिर भी /नकारात्मक उद्धरणों को "शून्य की ओर झुकाव" के बजाय गोल करने की अनुमति दी। देखें कि आपको C89 में पूर्णांक विभाजन के लिए अलग-अलग मान क्यों मिलते हैं? । इस प्रकार कुछ पूर्व C99 संकलन के साथ, %कोड यूक्लिडियन डिवीजन "मॉड" की तरह कार्य कर सकता है। उपरोक्त modulo_Euclidean()इस वैकल्पिक पुराने स्कूल के साथ शेष भी काम करेगा।


1
सी में यूक्लिडियन डिवीजन और मोडुलो फ़ंक्शन को लागू करने के लिए, देखें लिए, कंप्यूटर वैज्ञानिकों के लिए डिवीजन और मोडुलस । यह तेजी से चल सकता है यदि आप जानते हैं कि केवल आपका लाभांश नकारात्मक हो सकता है, लेकिन आपका विभाजक हमेशा सकारात्मक होता है: godbolt.org/g/63UqJo । संबंधित: गैर-नकारात्मक मॉडुलो के लिए एक x86 एएसएम सवाल पूछ रहा है
पीटर कॉर्डेस


2

मापांक, मॉड्यूलर अंकगणित में जैसा कि आप जिक्र कर रहे हैं, अंकगणित विभाजन के बाद बचा हुआ या शेष मूल्य है। यह आमतौर पर शेष के रूप में जाना जाता है। % औपचारिक रूप से C / C ++ में शेष संचालक है। उदाहरण:

7 % 3 = 1  // dividend % divisor = remainder

चर्चा के लिए क्या शेष है, इस% ऑपरेशन के लिए नकारात्मक इनपुट का इलाज कैसे करें। आधुनिक सी और सी ++ इस ऑपरेशन के लिए एक हस्ताक्षरित शेष मूल्य का उत्पादन करते हैं जहां परिणाम का संकेत हमेशा लाभांश इनपुट के संकेत के बिना लाभांश इनपुट से मेल खाता है


1

C और C ++ और कई भाषाओं में, %शेष नहीं है मापांक ऑपरेटर।

उदाहरण के लिए ऑपरेशन -21 / 4में पूर्णांक भाग होता है -5और दशमलव भाग होता है -.25। शेष भाग अंश का अंश अंश है, इसलिए हमारा शेष भाग है-1 । जावास्क्रिप्ट शेष ऑपरेटर का उपयोग करता है और इसकी पुष्टि करता है

console.log(-21 % 4 == -1);

मापांक ऑपरेटर ऐसा है जैसे आपके पास "घड़ी" थी। क्रमशः 12, 3 बजे, 6 बजे, और 9 बजे के पदों के मानों 0, 1, 2, और 3 के साथ एक चक्र की कल्पना करें। घड़ी के चारों ओर भागफल-वार समय-समय पर मोड़ना हमें हमारे मापांक ऑपरेशन के परिणाम पर, या, एक नकारात्मक भागफल, प्रति-घड़ी, उपज 3 के साथ हमारे उदाहरण में।

नोट: मापांक हमेशा भाजक के समान चिन्ह होता है और भागफल के समान चिन्ह शेष होता है। भाजक और शेष को जोड़ना जब शेष कम से कम एक ऋणात्मक पैदावार होता है।


-2

गणित में मोडुलो ऑपरेशन का परिणाम यूक्लिडियन डिवीजन का शेष है। हालांकि, अन्य सम्मेलन संभव हैं। कंप्यूटर और कैलकुलेटर में संख्याओं के भंडारण और प्रतिनिधित्व के विभिन्न तरीके हैं; इस प्रकार मोडुलो ऑपरेशन की उनकी परिभाषा प्रोग्रामिंग भाषा और / या अंतर्निहित हार्डवेयर पर निर्भर करती है।

 7 modulo  3 -->  1  
 7 modulo -3 --> -2 
-7 modulo  3 -->  2  
-7 modulo -3 --> -1 

2
विकि इयूक्लिडियन विभाजन का दावा है 0 ≤ r < |b|जो उर्फ शेष का अर्थ है "सापेक्ष आपरेशन।" हमेशा कम से कम 0. क्या परिभाषा है जो आप -2 और -1 में परिणाम का उपयोग कर रहे हैं?
चक्स -

महोदय, मैं नहीं, लेकिन मैं सिर्फ गूगल 7 modulo -3 -> -2 .और।-7 modulo -3 -> -1 कृपया महोदय को समझाएं कि ऐसा क्यों हुआ
shub sharma

1
विकी यूक्लिडियन विभाग की तुलना में Google modulo (हस्ताक्षरित modulo?) की एक अलग परिभाषा का उपयोग करता है (जैसा कि रेमंड टी। बोएट द्वारा वर्णित है)। यह मतभेदों पर अधिक चर्चा करता है। कहानी का नैतिक: a%bऔर सकारात्मक a modulo bहोने पर एक ही अर्थ है a,b। C99 %नकारात्मक मानों के साथ सटीक रूप से परिभाषित होता है। सी इस "शेष '।" कहता है Modulo "ऋणात्मक मानों के विषय में दुनिया में विभिन्न परिभाषाएं हैं सी कल्पना ही उपयोग करता है।" सापेक्ष "सकारात्मक संख्या के संदर्भ में।
chux -
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.