Modulorechnung mit negativen Zahlen?

5 Antworten

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 :-)


Suboptimierer  19.01.2017, 16:29

Können nicht beide Lösungen richtig sein? ;)

0

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)

Woher ich das weiß:Studium / Ausbildung

  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

Woher ich das weiß:Studium / Ausbildung – Mathematik

ohwehohach  19.01.2017, 16:24

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.

1
Snapstromegon  19.01.2017, 16:26
@ohwehohach

Er hat halt in die falsche Richtung das Ergebnis abgewandelt. Richtig wäre dann -18*57+36

1
ohwehohach  19.01.2017, 16:36
@Suboptimierer

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

0
Suboptimierer  19.01.2017, 16:39
@ohwehohach

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.

1