Một mô-đun có thể là âm?
%
có thể âm vì nó là toán tử còn lại , phần còn lại sau khi chia, không phải sau Euclidean_division . Vì C99 kết quả có thể là 0, âm hoặc dương.
// a % b
7 % 3 --> 1
7 % -3 --> 1
-7 % 3 --> -1
-7 % -3 --> -1
Các modulo OP muốn là một cổ điển modulo Euclide , không %
.
Tôi đã mong đợi một kết quả tích cực mỗi lần.
Để thực hiện một modulo Euclide được xác định rõ bất cứ khi nào a/b
được xác định, a,b
có bất kỳ dấu hiệu nào và kết quả không bao giờ âm:
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