โมดูลัสสามารถเป็นลบได้หรือไม่?
%
สามารถเป็นค่าลบมันเป็นผู้ประกอบการที่เหลือที่เหลือหลังจากส่วนที่ไม่ได้หลังจากEuclidean_division ตั้งแต่ C99 ผลลัพธ์อาจเป็น 0, ลบหรือบวก
// a % b
7 % 3 --> 1
7 % -3 --> 1
-7 % 3 --> -1
-7 % -3 --> -1
โมดูโล OP อยากเป็นคลาสสิกแบบโมดูโลยุคลิด%
ไม่
ฉันคาดหวังผลลัพธ์ที่เป็นบวกทุกครั้ง
ในการดำเนินการแบบยุคลิดแบบยุคลิดที่กำหนดไว้อย่างดีเมื่อใดก็ตามที่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