Modulo mit negativen Zahlen.
-
Ich habe eine Frage zu folgender Aufgabe:
int dif(int i, int j)
{
int y= (i%j)%j;
return y;
}printf("%d", dif(5,-2));
Es soll 1 rauskommen, aber warum? meiner Meinung sollte da doch eigentlich 5 rauskommen oder nicht?
-
Wozu ist denn das zweite %j? Wenn's beim ersten Mal modulo noch nicht gereicht hat?
Zur Frage: Ich hätte ja noch verstanden, wenn du -1 als mögliche Antwort genannt hättest, aber wie kommst du denn auf 5?
Wie auch immer, die Definition von Modulo bei negativen Zahlen ist nicht immer einheitlich. In C (ab 1999er Standard) und C++ (b 2011er Standard), ist festgelegt, dass der Divident das Vorzeichen des Ergebnisses vorgibt.
Die Rechnung ist hier:
5 / (-2) = (-2)
(-2) * (-2) = 4
5 - 4 = 1
-
Modulorechnung mit negativem Modul ist eigentlich Käse, weil
(-m) = {0,+m,-m,+2m,-2m,...} = (m)
(ein Ideal ist schließlich eine additive Gruppe)
Ganz im Gegensatz zur Division mit Rest. Da ist ein negativer Divisor natürlich sinnvoll, und der Rest will geeignet definiert sein.
sollte man nicht immer in einen Topf werfen, aber weil jetzt Faßnacht ist, ist es Ok.