क्या एक मापांक नकारात्मक हो सकता है?
%
नकारात्मक हो सकता है क्योंकि यह शेष ऑपरेटर है , विभाजन के बाद शेष है, यूक्लिडियन_डिविजन के बाद नहीं । C99 के बाद से परिणाम 0, नकारात्मक या सकारात्मक हो सकता है।
// a % b
7 % 3 --> 1
7 % -3 --> 1
-7 % 3 --> -1
-7 % -3 --> -1
सापेक्ष ओ पी चाहता था एक क्लासिक है इयूक्लिडियन सापेक्ष , नहीं %
।
मैं हर बार सकारात्मक परिणाम की उम्मीद कर रहा था।
एक यूक्लिडियन मोडुलो निष्पादित करने के लिए जो अच्छी तरह से परिभाषित है जब भी a/b
परिभाषित किया जाता है, a,b
किसी भी संकेत के होते हैं और परिणाम कभी भी नकारात्मक नहीं होता है:
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;
}
modulo_Euclidean( 7, 3) --> 1
modulo_Euclidean( 7, -3) --> 1
modulo_Euclidean(-7, 3) --> 2
modulo_Euclidean(-7, -3) --> 2