Следующий тест доказывает, что ваша первоначальная реализация дает те же результаты, что и исходный оператор %
:
static int mod(int n, int m) {
return n - m * (n / m);
}
// test
int[][] data = {
{100, 10}, {-100, 10}, {100, -10}, {-100, -10},
{ 5, 3}, {- 5, 3}, { 5, - 3}, {- 5, - 3}
};
Arrays.stream(data)
.forEach(d -> System.out.printf("%s: %d %% %d = %d mod=%d%n",
d[0]%d[1] == mod(d[0], d[1]) ? "OK" : "BAD",
d[0], d[1], d[0]%d[1], mod(d[0], d[1])));
Вывод:
OK: 100 % 10 = 0 mod=0
OK: -100 % 10 = 0 mod=0
OK: 100 % -10 = 0 mod=0
OK: -100 % -10 = 0 mod=0
OK: 5 % 3 = 2 mod=2
OK: -5 % 3 = -2 mod=-2
OK: 5 % -3 = 2 mod=2
OK: -5 % -3 = -2 mod=-2