Modulorechnung mit negativen Zahlen?
Ich möchte -990 mod 57 ausrechnen. Laut meinem Lösungsblatt kommen da 36 raus. Ich kann allerdings nicht nachvollziehen, wie man das mit einem Taschenrechner berechnet. Selbst wenn ich das in meinen Rechner am Laptop eingebe, der eine Modulo-Funktion besitzt, komme ich auch nicht auf genanntes Ergebnis... Kann mir jemand die nötigen Rechenschritte erklären oder hat einen Tipp, wo diese zu finden sind? (gegoogelt habe ich schon, alle Antworten die ich gefunden habe, haben kein Stück weiter geholfen...) Danke
5 Antworten
Zur Lösung 36 (für -990 mod 57) kommt man folgendermaßen:
-18 * 57 = -1 026.
Der Rest ergibt sich nun aus der Differenz aus dem Zielwert (-990) und dem errechneten Wert (-1026), also:
Rest = -990 - (-1026) = -990 + 1026 = 36.
(Vgl. Fall mit positiven Zahlen: 990 mod 57 = 990 - (17*57) = 990 - 969 = 21)
Aus meiner Sicht ist das Lösungsblatt falsch. Eigentlich müsste 21 rauskommen.
Die Modulo-Operation berechnet hat, welcher Rest bleibt, wenn man eine Zahl ganzzahlig durch eine andere dividiert.
Nimm mal nur positive Zahlen: 990 mod 57 ist 21, denn x * 57 + 21 = 990, wobei x = 17.
Das gleiche gilt im Negativen: -990 mod 57 ist -21, denn x * 57 - 21 = -990, wobei x = -17.
Ich habe diese Lösung übrigens mit drei Taschenrechnern und einem Datenbankmanagementsystem geprüft (und es wäre fatal, wenn das falsch rechnen würde): Meine Lösung stimmt :-)
Wenn es nach mir ginge - leider geht es aber nicht nach mir - wird alles ganz einfach. 57 - 1 = 56 ; das durch zwei macht 28 . Eine Zahl mod 57 kann also sein
{ 0 ; +/ 1 ; 2 ; ... ; 28 } ( 1 )
( - 990/57 ) = ( - 330/19 ) ( 2 )
330 . 19 = 17 R 7 ( 3a )
( - 330 ) = - 17 * 19 - 7 | * 3 ( 3b )
( - 990 ) = - 17 * 57 - 21 ( 3c )
Nenne mir die Programmiersprache, die das kann. Fortran etwa überträgt alles in den positiven Zahlenraum und setzt anschließend ein Minuszeichen davor; voll fürn Hund.
Die meisten Taschenrechner rechnen statt "modulo" den "Rest" aus, weil das oft sinnvoller ist, aber manchmal einfach nur falsch - kommt drauf an was man will.
PS: Kannst in google eingeben "-990 mod 57" ;)
Bei 990 mod 57 bleibt ein Rest von 21, ergo bei -990 ein Rest von -21. Der Repräsentant wird aber meist gerne positiv gewählt. Der nächste ist -21 + 57 = 36.
-990 = -17 * 57 -21 = -16 * 57 +36
Er hat halt in die falsche Richtung das Ergebnis abgewandelt. Richtig wäre dann -18*57+36
In der Mathematik verwendet man üblicherweise Repräsentanten >= 0.
Ein Element einer Restklasse bezeichnet man auch als Repräsentant der Restklasse. Häufig verwendet man die Standardrepräsentanten 0,1,2,... ,m-1.
Zum einen gibt es offensichtlich einen Unterschied, ob ich bei Google -990 mod 57 eingebe (36) oder im SQL-Server oder in einem C# Testprogramm (beide -21). Mit fatal meine ich, dass es nicht sein kann, dass es hierzu offensichtlich 2 unterschiedliche Definitionen gibt, welche zu unterschiedlichen Ergebnissen führen (man denke an Algorithmen zu Verschlüsselung, wo es auf Modulo-Rechnung ankommt).
Die Definition, die ich kenne (und nach der offensichtlich C# und auch der SQL-Server rechnen, sowie auch die diversen Taschenrechner, auf denen ich das gerade probiert habe) ist: Modulo ist der Rest einer ganzzahligen Division von x durch y.
Daher gilt:
-990 : 57 = -17,3 => -990 = -17 * 57 + r = -969 + r => r = -21
Also rechnet Google falsch? o.O
Verschlüsselungsalgorithmen arbeiten i. d. R. nicht mit negativen Zahlen. Da stellt sich das Problem gar nicht.
Die Aussage, dass 36 als Ergebnis falsch ist, ist jedenfalls definitiv falsch. 36 ist genauso Repräsentant der Restwertklasse wie -21.
Aber -16 * 57 + 36 ist -876... Du meinst -18 * 57 + 36. So wird aber das mod nicht berechnet. Das ist falsch und wäre im Gegenteil sogar fatal, wenn Computersysteme so rechnen würden.