x MOD y
-
bei c++ ist es glaube ich undefiniert...
-
es ist -2!
denn x mod y ist ja nix anderes als x-(x/y)*y wobei / für eine ganzzahldivision steht.
-
http://www.fh-landshut.de/~hmn/mfi/loesungen4.pdf
Aufgabe 8==> Griffin hat recht!
-
Wie kann Griffin recht haben, wenn die dort angegebene Funktion 1 ergibt?
Definition (aus deiner angegebenen Quelle):
n mod p (für n < 0) = p - (-n) mod p
also -5 mod 3 = 3 - 5 mod 3 = 3 - 2 = 1
-
Mathematische Reste sind immer grösser oder gleich 0. Deshalb fällt -2 ohnehin flach. 1 ist richtig weil: -5 = -2*3+1 .
Modulo ist in der Tat in Java und C++ nur für positive Werte definiert und liefert falsche ErgebnisseMfG Spacelord
-
Ich hab jetzt nur noch ne Verständnisfrage:
-5 = -2 * 3 +1
Das heißt ja dann, das -5 / 3 = -2 oder?
-
wie kommst Du jetzt dadrauf?
Vielleicht solltest Du die 1 auch dritteln?
-
ich verstehs einfach nicht
[ Dieser Beitrag wurde am 12.04.2003 um 19:42 Uhr von Gary editiert. ]
-
Ich verstehe Gary da durchaus, denn 5 = 1*3 + 2. Deshalb ist 5/3 = 1 und 5%3 = 2. Es gibt für eine solche Darstellung für die 5 durch die 3 nur EINE Möglichkeit (mit einem Rest <5). Wenn man jetzt auch noch negative Zahlen so darstellen will, dann gibt es 2 Möglichkeiten. Für unser Beispiel wären das:
-5 = (-2) * 3 + 1 -5 = (-1) * 3 - 2
Da wir uns jetzt ja wohl alle einig sind, dass (-5)/3 = -1, wäre eigentlich die zweite Darstellung naheliegend. Wenn man nun den Rest als stets positiv (oder 0) definiert, dann muss man diese beiden Darstellungen "zusammenwürfeln". Aber was soll's... mir isses egal. Ist alles eine Frage der Definition.
-
-5 Mod 3 ist 1, denn
-10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10
2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 (x mod 3=1)-5 mod 3 kann nur 1 sein , sonnst musste sich bei 0 die Reihenfolge ändern)
c++ macht es möglicherweise anders
-
So ist die Zuordnung besser zu sehen
(x) (x mod 3)
. .
. .
-10 2
-9 0
-8 1
-7 2
-6 0
-5 1 !
-4 2
-3 0
-2 1
-1 2
0 0
1 1
2 2
3 0
4 1
5 2
6 0
7 1
8 2
9 0
10 1
. .
. .
. .
-
Danke Leute.
Jetzt ists klarer.
-
Original erstellt von <MisterX>:
sonnst musste sich bei 0 die Reihenfolge ändernNa und? Was ist denn gegen
(x) (x mod 3) . . . . -10 -1 -9 0 -8 -2 -7 -1 -6 0 -5 -2 -4 -1 -3 0 -2 -2 -1 -1 0 0 1 1 2 2 3 0 4 1 5 2 6 0 7 1 8 2 9 0 10 1 . . . . . .
zu sagen? Wie gesagt: Ist alles Definitionssache!
[ Dieser Beitrag wurde am 15.04.2003 um 02:46 Uhr von WebFritzi editiert. ]
-
Es ist etwas gegen -x als Ergebnis zu sagen, weil modulo (mathematisch) so def. ist, dass es keine negativen Elemente geben darf!
Das Rechnen mit dieser Struktur beruht daruaf, dass die Körperaxiome erfüllt sind!
Ohne diese Axiome würde z.B. dies nicht möglich sein:
(k mod p) + (l mod p) = (k+l) mod p
(k mod p) * (l mod p) = (k*l) mod pDenn sei ( k mod p) = [r] und (l mod p) =[s], dann gibt es a,b Element Z
mit k=a*p+r, l=b*p+s Also:k+l=(a+b)p +(r+s)
k*l=(a*b*p+a*s+b*r)*p+r*sAlso haben k+l und r+s sowie k*l und r*s denselben Rest bei der Division durch p.
Statt mit r und s können wir also mit k und l rechnen.
Aber nur, wenn man KEINE negativen Zahlen als Ergebnis zulässt!ps. Sollte ich einen Fehler eingebaut haben , bitte schreiben!
-
Also ein x86 Prozessor scheint ebenfalls 2 als Lösung für 5 MOD -3 als richtig anzusehen. Hier ein wenig Code:
mov eax,5 cdq mov ecx,-3 idiv
Danach ist EAX gleich -1 (Ergebnis) und EDX ist gleich 2 (Rest). Und noch ein Zitat: "The sign of the remainder is always the same as the sign of the dividend" (aus: "Intel Pentium Instruction Set Reference", bei der Beschreibung der IDIV Instruktion).
-
Das heißt ja, ich hatte recht.
-
[ Dieser Beitrag wurde am 22.04.2003 um 19:15 Uhr von elise editiert. ]
-
sorry elise das kommt davon wenn man vergißt sich umzumelden ...
Gary: Nö, es ging ja ursprünglich um -5 mod 3, nicht 5 mod -3 :p
Außerdem ist es fraglich, ob der IDIV-Befehl wirklich modulo rechnet, in der Befehlsbeschreibung steht ja "remainder", also Rest (nein das ist nicht das gleiche)
-
worin liegt denn der Unterschied zwischen REM und MOD?
-
Original erstellt von <MisterX>:
**Das Rechnen mit dieser Struktur beruht daruaf, dass die Körperaxiome erfüllt sind!Ohne diese Axiome würde z.B. dies nicht möglich sein:
(k mod p) + (l mod p) = (k+l) mod p
***lol* Das ist nicht dein Ernst, oder? Bis hierhin habe ich gelesen, aber nicht weiter. Da redest du von Körperaxiomen und schreibst so einen Müll. Das disqualifiziert dich, mein Junge! Setz mal p = 8, k = 15 und l = 14. Aha, nach deinem Gesetz wäre dann 7 + 6 = 5. Uiuiui. Allerdings stimmt das "Gesetz":
((k mod p) + (l mod p)) mod p = (k+l) mod p
Dieses wäre aber bei unserer Definition des Modulo-Operators (obige Aufgabe: -2) gültig.