একটি মডুলাস নেতিবাচক হতে পারে?
%
operator ণাত্মক হতে পারে কারণ এটি অবশিষ্ট অপারেটর , বিভাগের পরের অংশ, ইউক্লিডিয়ান_বিভাজনের পরে নয় । সি 99 এর পরে ফলাফল 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